Android性能調(diào)優(yōu)工具TraceView介紹

Android自帶的TraceView堪比java的性能調(diào)優(yōu)工具visualvm線程視圖,可以方便的查看線程的執(zhí)行情況,某個方法執(zhí)行時間、調(diào)用次數(shù)、在總體中的占比等,從而定位性能點。

1、生成日志,運行TraceView

運行TraceView有兩種方式

a、調(diào)用Debug類

在開始調(diào)試的地方,如Activity的onCreate函數(shù),添加

Java

1

Debug.startMethodTracing("tracefilename");

結(jié)束調(diào)試的地方,如Activity的onDestroy函數(shù),添加

Java

1

Debug.stopMethodTracing();

之后運行你的app一段時間并退出會在sd卡根目錄生成tracefilename.trace這個log文件,記錄這段時間內(nèi)的運行信息。

將日志文件pull到PC端,cmd到android sdk tools文件夾內(nèi)(或綁定sdk tools目錄到系統(tǒng)path內(nèi)),運行traceview tracefilename.trace即可打開TraceView分析界面,如下這種方式可以隨意開始和結(jié)束調(diào)試的位置,所以適合具體代碼的性能排查。find貌似只支持小寫,所以如果查找JsonObject需要輸入jsonobject

b、使用DDMs

打開devices窗口,選擇某個進(jìn)程,點擊右上角的start method profiling

運行app一段時間后,再點擊已變成stop method profiling的該按鈕。eclipse會自動彈出debug的標(biāo)簽(可通過菜單File->save as保存數(shù)據(jù))。界面同上面。

這種方式不需要修改代碼,所以對于沒有源碼的程序同樣可以進(jìn)行排查。同時可以方便的進(jìn)行全局性能排查

2、TraceView界面信息介紹

TraceView界面包括時間面板和方法面板

(1) 時間面板(Timeline Panel)

時間面板展示了每個線程的執(zhí)行情況,其中的[1]main即為ui主線程。

移動到某個位置可以查看該點對應(yīng)的方法的執(zhí)行信息,點擊方法面板則會選中相應(yīng)的方法。

可以左鍵按住不放選中區(qū)域放大局部精細(xì)查看,不同方法用不同顏色標(biāo)注

(2) 方法面板(Profile Panel)

方法面板展示了所有方法的執(zhí)行情況,點擊某個方法可以查看在對應(yīng)線程上的執(zhí)行時間區(qū)域,并會顯示其父方法及子方法。

每個方法包括如下信息列,可點擊某列進(jìn)行排序,從而確定產(chǎn)生性能問題的函數(shù):

Incl Cpu Time, Excl Cpu Time, Incl Real Time, Excl Real Time, Incl Cpu Time%, Excl Cpu Time%, Incl Real Time%, Excl Real Time%, Calls+RecurCalls/Total, Cpu Time/Call, Real Time/Call

所有的Time都是以毫秒計算。每列具體含義及作用如下:

a. Incl表示將所有子函數(shù)耗時也計算在內(nèi),Excl則表示不包括子函數(shù)的調(diào)用時間。對比可以確定耗時操作發(fā)生是自身還是子函數(shù)中。

b. Cpu Time表示占用cpu執(zhí)行的時間,Real Time包括Cpu Time以及等待、切換的時間等,所以一般都大于Cpu Time。對比可以判斷耗時操作是否在cpu執(zhí)行段內(nèi)。

c. 上面四個指標(biāo)對應(yīng)的%表示函數(shù)在總時間的占比。方便查看某個函數(shù)的時間占比。

d. Calls+RecurCalls/Total表示被外部調(diào)用次數(shù)+遞歸次數(shù)/總次數(shù)。可以查看調(diào)用次數(shù)是否符合自己預(yù)期。

e. Cpu Time/Call, Real Time/Call表示總的Cpu Time及Real Time與總調(diào)用次數(shù)的比例。查看每次調(diào)用的耗時,一般可通過簡單此項確定每個函數(shù)的性能。

3、其他調(diào)優(yōu)工具

(1) dmtracedump

sdk tools下的另外一個工具dmtracedump可用于生成上述log文件內(nèi)的函數(shù)調(diào)用關(guān)系圖,不過在windows上稍微大點的文件即或報錯

(2) visualvm

看到ddms提供了dump hprof file的功能,本來準(zhǔn)備生成hprof文件用visualvm打開試試,結(jié)果一直打不開..

在銀狐的幫忙下,發(fā)現(xiàn)android sdk tools dump的hprof需要經(jīng)過sdk tools下的hprof-conv轉(zhuǎn)換為標(biāo)準(zhǔn)的hprof文件,才能通過visualvm或eclipse的MemoryAnalyzer打開進(jìn)行分析,之后就同java一樣了。hprof-conv格式為

hprof-conv

關(guān)于visualvm可以簡單的查看http://trinea.iteye.com/blog/1216170

之后會寫篇文章詳細(xì)的介紹visualvm和MemoryAnalyzer

http://www.trinea.cn/android/android-traceview/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容