獲取Android界面性能數(shù)據(jù)的快捷方法
探測 界面繪制性能
獲取界面的繪制性能有很多種方法,比如說 Systrace 但是這種方法 有一個不太好的地方就是使用起來較為復雜, 有沒有一種 谷歌官方推薦 的方便一點的方法 ,其實是有的,只需要一個函數(shù) 就可以獲得layout的時間 非常適合于 我們平時開發(fā)中 測試頁面性能。
//調(diào)試界面性能時使用,可打印關(guān)鍵的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)
//多數(shù)情況下更習慣于ms
val layoutMeasureDurationMs = layoutMeasureDurationNs.toDouble() / 1000000.toDouble()
//如果有超過16ms的輸出 那就要考慮你的界面是否需要進行優(yōu)化了
Log.v("wuyue", "layoutMeasureDurationMs:" + layoutMeasureDurationMs)
}, handler)
}
}
看下運行結(jié)果:

可以根據(jù)log的結(jié)果 來 估算頁面的渲染性能。類似于這種》=16ms 才layoutMeasure一次的,顯然是界面有了卡頓
界面首次繪制完成時間
通常而言,我們有時候還希望獲取到界面啟動 到“界面繪制完成” 的時間 為什么要加引號? 因為 往往 ActivityTaskManager: Displayed 展示出來的結(jié)果 僅僅是
表示了從啟動應(yīng)用到系統(tǒng)認為其 "已啟動" 所花費的時間,其中包括繪制第一幀 (所以是 "已顯示" 的狀態(tài))
但大部分的情況是我們界面啟動以后 還會做一些業(yè)務(wù)上的操作 比如去io獲取一些重要的信息 然后刷新ui 怎么獲取到 界面啟動 到這個時間點的耗時?
大部分人都是在在onCreate里面 獲取一個時間戳 然后在業(yè)務(wù)操作完成的時間點 再獲取一個時間戳 然后算一下 差額,
其實現(xiàn)在就有更簡便的寫法
reportFullyDrawn
在你認為合適的地方 調(diào)用這個函數(shù) 然后觀測如下日志:

這是一種更為簡便的觀測方法
更快捷的獲取activity的啟動時間
有時候我們喜歡觀察如下日志:

來獲取activity的啟動時間
但其實有時候 這樣也挺不方便的,尤其是需要頻繁測試一個頁面的啟動性能
老是靠手點 很不方便,其實可以用 shell 命令來完成:
adb shell am start-activity -W -n 包名/activity名稱

也可以對腳本的執(zhí)行結(jié)果 進行g(shù)rep 只抽取你關(guān)鍵的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名稱
獲取應(yīng)用冷啟動 性能
有時候我們需要統(tǒng)計app的冷啟動性能,單次結(jié)果往往不準確 還需要多次統(tǒng)計以后 做平均值
也可以用如下腳本來實現(xiàn), 注意不是單引號 而是 `
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
效果如下:

以上就是獲取Android界面性能數(shù)據(jù)的快捷方法的詳細內(nèi)容,更多關(guān)于獲取Android界面性能數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
android 中使用TableLayout實現(xiàn)表單布局效果示例
本篇文章主要介紹了android 中使用TableLayout實現(xiàn)表單布局效果示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
Android控件Spinner實現(xiàn)下拉列表及監(jiān)聽功能
這篇文章主要介紹了Android控件Spinner實現(xiàn)下拉列表及監(jiān)聽功能,這是在Web開發(fā)中一個必不可少的交互性組件,而在Android中的對應(yīng)實現(xiàn)就是Spinner。需要的朋友可以參考下2018-07-07
Android使用MulticastSocket實現(xiàn)多點廣播圖片
這篇文章主要為大家詳細介紹了Android使用MulticastSocket實現(xiàn)多點廣播圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Android和JavaScript相互調(diào)用的方法
這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪問Android的技巧,需要的朋友可以參考下2015-12-12
Android實現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法
這篇文章主要介紹了Android實現(xiàn)ListView分頁自動加載數(shù)據(jù)的方法,涉及Android生成listview列表的相關(guān)技巧,需要的朋友可以參考下2015-12-12
安卓(Android)動態(tài)創(chuàng)建多個按鈕并添加監(jiān)聽事件
本文主要介紹Android動態(tài)創(chuàng)建多個按鈕并給每個按鍵添加監(jiān)聽事件,在做Android項目會經(jīng)常遇到的,希望對需要用到的同學有所幫助2016-07-07

