一、SysTrace簡(jiǎn)介
Systrace允許你監(jiān)視和跟蹤Android系統(tǒng)的行為(trace)。它會(huì)告訴你系統(tǒng)都在哪些工作上花費(fèi)時(shí)間、CPU周期都用在哪里,甚至你可以看到每個(gè)線程、進(jìn)程在指定時(shí)間內(nèi)都在干嘛。它同時(shí)還會(huì)突出觀測(cè)到的問題,從垃圾回收到渲染內(nèi)容都可能是問題對(duì)象,甚至提供給你建議的解決方案。但是不能確定具體有問題的代碼在哪里,這里可用用traceview工具。在Android平臺(tái)中,Systrace主要由3部分組成:
內(nèi)核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用Systrace的話,必須開啟kernel中和ftrace相關(guān)的模塊。
數(shù)據(jù)采集部分:Android定義了一個(gè)Trace類。應(yīng)用程序可利用該類把統(tǒng)計(jì)信息輸出給ftrace。同時(shí),Android還有一個(gè)atrace程序,它可以從ftrace中讀取統(tǒng)計(jì)信息然后交給數(shù)據(jù)分析工具來處理。
數(shù)據(jù)分析工具:Android提供一個(gè)systrace.py(python腳本文件,位于Android SDK目錄/tools/systrace中,其內(nèi)部將調(diào)用atrace程序)用來配置數(shù)據(jù)采集的方式(如采集數(shù)據(jù)的標(biāo)簽、輸出文件名等)和收集ftrace統(tǒng)計(jì)數(shù)據(jù)并生成一個(gè)結(jié)果網(wǎng)頁文件供用戶查看。 從本質(zhì)上說,Systrace是對(duì)Linux Kernel中ftrace的封裝。應(yīng)用進(jìn)程需要利用Android提供的Trace類來使用Systrace.
二、生成Trace
生成Trace分析文檔的步驟如下:
1.打開手機(jī)調(diào)試模式,usb連接手機(jī),運(yùn)行APP
2.啟動(dòng)Systrace(命令行,Eclipse,Android Studio都可)
3.手機(jī)上做想要被trace的任何操作
2.1 Android Studio啟動(dòng)
1.打開Tools > Android > Android Device Monitor.
2.選中設(shè)備,點(diǎn)擊Capture System
3.配置trace,點(diǎn)擊OK
示例:
1.在SysTrace中選擇需要項(xiàng),如:CPU內(nèi)存使用,Graphics圖像幀數(shù),View System視圖的使用等。
2.時(shí)長設(shè)置5秒,需要在5秒內(nèi) 執(zhí)行卡頓操作業(yè)務(wù)的代碼塊。之后會(huì)在指定目錄生成trace.html文件。
3.我的項(xiàng)目里云書架同步下載比較卡,就著重分析這部分。
三、分析Trace
分析前,介紹一些技巧:
3.1 監(jiān)視幀數(shù)
F圓圈表示一幀(Frame),有綠,黃,紅三種狀態(tài),渲染時(shí)間依次遞增。
正常繪制是1秒60幀,大約一幀16.6毫秒,在這個(gè)值以下是正常顏色綠色,如果超過它就會(huì)變成紅色、黃色。非綠色的都說明有問題。單點(diǎn)擊后可查看Frame詳細(xì)信息,根據(jù)警報(bào)提示解決問題。
3.2 快捷鍵
3.3分析文件
用Google瀏覽器打開生成的trace文件,可以進(jìn)行性能分析:下面是我項(xiàng)目云書架同步時(shí)的SysTrace結(jié)果圖。
上圖是一個(gè)ui卡頓的trace記錄,橫軸是時(shí)間,堅(jiān)軸是線程/進(jìn)程。
可以看到,很多帶“F”的模塊,放大區(qū)域會(huì)看到Inefficient ListView recycling/rebinding 等Alert提示。
當(dāng)我們點(diǎn)擊了Alerts或者點(diǎn)擊右邊的Alerts列表中的任何一點(diǎn)我們可以看到相對(duì)應(yīng)的優(yōu)化提示以及可能會(huì)出現(xiàn)優(yōu)化的視頻教程鏈接。
我們可以點(diǎn)擊一塊Frames中的F來查看 ,通過按下m鍵查看這一幀到下一幀所花費(fèi)的時(shí)間以及哪個(gè)方法被調(diào)用的最長。
可以看到這時(shí)間>16.6ms,系統(tǒng)要求UI的60fps水準(zhǔn)所以系統(tǒng)會(huì)報(bào)出黃色的警告。然后我們從Description中可以讀出到底是哪里出了問題。
Description描述為 Inefficient ListView recycling/rebinding ,我們初步定位是ListView列表問題,下面我們用TraceView詳細(xì)分析具體哪個(gè)方法,哪行代碼耗時(shí)或重復(fù)多次調(diào)用。
TraceView
關(guān)于TraceView用法及分析 上一節(jié)講過 TraceView優(yōu)化工具,直接上分析圖:
主要查看 占用CPU較大或調(diào)用次數(shù)過多的函數(shù),可以看到 云書架里 dealWithCloudBook函數(shù) :
**Cpu Time : CPU占用率 5.4% **
Calls+Recurcalls:調(diào)用14次
好,開始你的表演吧,問題查到了,如何解決:
1.一部分是項(xiàng)目邏輯問題,稍微業(yè)務(wù)重構(gòu)就可以
2.還有事Google自帶或版本升級(jí)造成的
解決問題
最后,追蹤到代碼,發(fā)現(xiàn)下載過程創(chuàng)建過多線程,優(yōu)化處理即可。
適用平臺(tái)
Android Version: 6.0及以上 Platform: 通用
QQ技術(shù)交流群:570847156 歡迎入坑