獲取Android界面性能數(shù)據(jù)的快捷方法
探測(cè) 界面繪制性能
獲取界面的繪制性能有很多種方法,比如說(shuō) Systrace 但是這種方法 有一個(gè)不太好的地方就是使用起來(lái)較為復(fù)雜, 有沒(méi)有一種 谷歌官方推薦 的方便一點(diǎn)的方法 ,其實(shí)是有的,只需要一個(gè)函數(shù) 就可以獲得layout的時(shí)間 非常適合于 我們平時(shí)開(kāi)發(fā)中 測(cè)試頁(yè)面性能。
//調(diào)試界面性能時(shí)使用,可打印關(guān)鍵的layout耗時(shí),使用完畢需刪除 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ù)情況下更習(xí)慣于ms val layoutMeasureDurationMs = layoutMeasureDurationNs.toDouble() / 1000000.toDouble() //如果有超過(guò)16ms的輸出 那就要考慮你的界面是否需要進(jìn)行優(yōu)化了 Log.v("wuyue", "layoutMeasureDurationMs:" + layoutMeasureDurationMs) }, handler) } }
看下運(yùn)行結(jié)果:
可以根據(jù)log的結(jié)果 來(lái) 估算頁(yè)面的渲染性能。類(lèi)似于這種》=16ms 才layoutMeasure一次的,顯然是界面有了卡頓
界面首次繪制完成時(shí)間
通常而言,我們有時(shí)候還希望獲取到界面啟動(dòng) 到“界面繪制完成” 的時(shí)間 為什么要加引號(hào)? 因?yàn)?往往 ActivityTaskManager: Displayed 展示出來(lái)的結(jié)果 僅僅是
表示了從啟動(dòng)應(yīng)用到系統(tǒng)認(rèn)為其 "已啟動(dòng)" 所花費(fèi)的時(shí)間,其中包括繪制第一幀 (所以是 "已顯示" 的狀態(tài))
但大部分的情況是我們界面啟動(dòng)以后 還會(huì)做一些業(yè)務(wù)上的操作 比如去io獲取一些重要的信息 然后刷新ui 怎么獲取到 界面啟動(dòng) 到這個(gè)時(shí)間點(diǎn)的耗時(shí)?
大部分人都是在在onCreate里面 獲取一個(gè)時(shí)間戳 然后在業(yè)務(wù)操作完成的時(shí)間點(diǎn) 再獲取一個(gè)時(shí)間戳 然后算一下 差額,
其實(shí)現(xiàn)在就有更簡(jiǎn)便的寫(xiě)法
reportFullyDrawn
在你認(rèn)為合適的地方 調(diào)用這個(gè)函數(shù) 然后觀測(cè)如下日志:
這是一種更為簡(jiǎn)便的觀測(cè)方法
更快捷的獲取activity的啟動(dòng)時(shí)間
有時(shí)候我們喜歡觀察如下日志:
來(lái)獲取activity的啟動(dòng)時(shí)間
但其實(shí)有時(shí)候 這樣也挺不方便的,尤其是需要頻繁測(cè)試一個(gè)頁(yè)面的啟動(dòng)性能
老是靠手點(diǎn) 很不方便,其實(shí)可以用 shell 命令來(lái)完成:
adb shell am start-activity -W -n 包名/activity名稱(chēng)
也可以對(duì)腳本的執(zhí)行結(jié)果 進(jìn)行g(shù)rep 只抽取你關(guān)鍵的total time 進(jìn)行展示
adb shell am start-activity -W -n 包名/activity名稱(chēng) | grep "TotalTime" | cut -d ' ' -f 2
adb shell am start-activity -S -W -R 100 -n 包名/activity名稱(chēng)
獲取應(yīng)用冷啟動(dòng) 性能
有時(shí)候我們需要統(tǒng)計(jì)app的冷啟動(dòng)性能,單次結(jié)果往往不準(zhǔn)確 還需要多次統(tǒng)計(jì)以后 做平均值
也可以用如下腳本來(lái)實(shí)現(xiàn), 注意不是單引號(hào) 而是 `
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名稱(chēng) | grep "TotalTime" | cut -d ' ' -f 2 done
效果如下:
以上就是獲取Android界面性能數(shù)據(jù)的快捷方法的詳細(xì)內(nèi)容,更多關(guān)于獲取Android界面性能數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android性能優(yōu)化以及數(shù)據(jù)優(yōu)化方法
- 簡(jiǎn)單了解Android性能優(yōu)化方向及相關(guān)工具
- Android性能之冷啟動(dòng)優(yōu)化詳析
- Android性能測(cè)試關(guān)注的指標(biāo)整理
- Android高性能日志寫(xiě)入方案的實(shí)現(xiàn)
- Android圖片性能優(yōu)化詳解
- Android端TCP長(zhǎng)連接的性能優(yōu)化教程分享
- Android性能調(diào)優(yōu)利器StrictMode應(yīng)用分析
- Android APP性能優(yōu)化分析
- 淺談android性能優(yōu)化之啟動(dòng)過(guò)程(冷啟動(dòng)和熱啟動(dòng))
相關(guān)文章
Android HorizontalScrollView內(nèi)子控件橫向拖拽實(shí)例代碼
本文主要介紹Android HorizontalScrollView的使用,這里給大家一個(gè)實(shí)例來(lái)展示HorizontalScrollView內(nèi)子控件橫向拖拽的效果實(shí)現(xiàn),有需要的小伙伴可以參考下2016-07-07android panellistview 圓角實(shí)現(xiàn)代碼
android panellistview 圓角是每一個(gè)android開(kāi)發(fā)者都具備的一項(xiàng),對(duì)于新手朋友來(lái)說(shuō)可能有點(diǎn)難度,接下來(lái)將詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12Android入門(mén)之IntentService的使用教程詳解
IntentService的生命周期中有一個(gè)非常好的方法-onHandleIntent方法,它是一個(gè)abstract方法,開(kāi)發(fā)者在實(shí)現(xiàn)IntentService時(shí)可以覆蓋它來(lái)處理“長(zhǎng)事務(wù)”。本文就來(lái)聊聊IntentService的使用,需要的可以參考一下2022-12-12Android實(shí)現(xiàn)帶有指示器的進(jìn)度條
這篇文章主要介紹了Android實(shí)現(xiàn)帶有指示器的進(jìn)度條的示例代碼,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下2021-05-05Android實(shí)戰(zhàn)項(xiàng)目之實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
隨著移動(dòng)互聯(lián)網(wǎng)的普及,手機(jī)應(yīng)用程序已經(jīng)成為人們生活中不可或缺的一部分,計(jì)算器是一類(lèi)被廣泛使用的應(yīng)用程序之一,這篇文章主要給大家介紹了關(guān)于Android實(shí)戰(zhàn)項(xiàng)目之實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器的相關(guān)資料,需要的朋友可以參考下2023-10-10Android手勢(shì)滑動(dòng)實(shí)現(xiàn)兩點(diǎn)觸摸縮放圖片
這篇文章主要介紹了Android手勢(shì)滑動(dòng)實(shí)現(xiàn)兩點(diǎn)觸摸縮放圖片的相關(guān)資料,需要的朋友可以參考下2016-02-02Android下通過(guò)httpClient發(fā)送GET和POST請(qǐng)求的實(shí)例代碼
這篇文章介紹了Android下通過(guò)httpClient發(fā)送GET和POST請(qǐng)求的實(shí)例代碼,有需要的朋友可以參考一下2013-08-08Android 簡(jiǎn)單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能
這篇文章主要介紹了Android 簡(jiǎn)單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下2021-03-03