日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 界面绘制完毕,几种获取android 界面性能数据的快捷方法

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 界面绘制完毕,几种获取android 界面性能数据的快捷方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

探測 界面繪制性能

獲取界面的繪制性能有很多種方法,比如說 Systrace 但是這種方法 有一個不太好的地方就是使用起來較為復雜, 有沒有一種 谷歌官方推薦 的方便一點的方法 ,其實是有的,只需要一個函數 就可以獲得layout的時間 非常適合于 我們平時開發中 測試頁面性能。

//調試界面性能時使用,可打印關鍵的layout耗時,使用完畢需刪除

fun Activity.printPerformanceForLayout(tag: String = "performance") {

val handlerThread = HandlerThread("FrameMetrics")

handlerThread.start()

val handler = Handler(handlerThread.looper)

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {

window.addOnFrameMetricsAvailableListener({ _, frameMetrics, _ ->

val frameMetricsCopy = FrameMetrics(frameMetrics)

//返回的是納秒

val layoutMeasureDurationNs = frameMetricsCopy.getMetric(FrameMetrics.LAYOUT_MEASURE_DURATION)

//多數情況下更習慣于ms

val layoutMeasureDurationMs = layoutMeasureDurationNs.toDouble() / 1000000.toDouble()

//如果有超過16ms的輸出 那就要考慮你的界面是否需要進行優化了

Log.v("wuyue", "layoutMeasureDurationMs:" + layoutMeasureDurationMs)

}, handler)

}

}

復制代碼

看下運行結果:

可以根據log的結果 來 估算頁面的渲染性能。類似于這種》=16ms 才layoutMeasure一次的,顯然是界面有了卡頓

界面首次繪制完成時間

通常而言,我們有時候還希望獲取到界面啟動 到“界面繪制完成” 的時間 為什么要加引號? 因為 往往 ActivityTaskManager: Displayed 展示出來的結果 僅僅是

表示了從啟動應用到系統認為其 “已啟動” 所花費的時間,其中包括繪制第一幀 (所以是 “已顯示” 的狀態)

但大部分的情況是我們界面啟動以后 還會做一些業務上的操作 比如去io獲取一些重要的信息 然后刷新ui 怎么獲取到 界面啟動 到這個時間點的耗時?

大部分人都是在在onCreate里面 獲取一個時間戳 然后在業務操作完成的時間點 再獲取一個時間戳 然后算一下 差額,

其實現在就有更簡便的寫法

reportFullyDrawn

在你認為合適的地方 調用這個函數 然后觀測如下日志:

這是一種更為簡便的觀測方法

更快捷的獲取activity的啟動時間

有時候我們喜歡觀察如下日志:

來獲取activity的啟動時間

但其實有時候 這樣也挺不方便的,尤其是需要頻繁測試一個頁面的啟動性能

老是靠手點 很不方便,其實可以用 shell 命令來完成:

adb shell am start-activity -W -n 包名/activity名稱

復制代碼

也可以對腳本的執行結果 進行grep 只抽取你關鍵的total time 進行展示

adb shell am start-activity -W -n 包名/activity名稱 | grep "TotalTime" | cut -d ' ' -f 2

復制代碼

adb shell am start-activity -S -W -R 100 -n 包名/activity名稱

復制代碼

獲取應用冷啟動 性能

有時候我們需要統計app的冷啟動性能,單次結果往往不準確 還需要多次統計以后 做平均值

也可以用如下腳本來實現, 注意不是單引號 而是 `

for i in `seq 1 100`

do

adb shell am force-stop com.vivo.space

sleep 2

adb shell am start-activity -W -n 包名/activity名稱 | grep "TotalTime" | cut -d ' ' -f 2

done

復制代碼

效果如下:

作者:vivo祁同偉

鏈接:https://juejin.cn/post/6953221575860568077

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的android 界面绘制完毕,几种获取android 界面性能数据的快捷方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。