Android性能调优工具TraceView
Android自帶的TraceView堪比java的性能調(diào)優(yōu)工具visualvm線程視圖,可以方便的查看線程的執(zhí)行情況,某個(gè)方法執(zhí)行時(shí)間、調(diào)用次數(shù)、在總體中的占比等,從而定位性能點(diǎn)。
1、生成日志,運(yùn)行TraceView
運(yùn)行TraceView有兩種方式
a、調(diào)用Debug類(lèi)
在開(kāi)始調(diào)試的地方,如Activity的OnCreate函數(shù),添加
Debug.startMethodTracing("tracefilename");結(jié)束調(diào)試的地方,如Activity的OnCreate函數(shù),添加
Debug.stopMethodTracing();之后運(yùn)行你的app一段時(shí)間并退出會(huì)在sd卡根目錄生成tracefilename.trace這個(gè)log文件,記錄這段時(shí)間內(nèi)的運(yùn)行信息。
將日志文件pull到PC端,cmd到android sdk tools文件夾內(nèi)(或綁定sdk tools目錄到系統(tǒng)path內(nèi)),運(yùn)行traceview tracefilename.trace即可打開(kāi)TraceView分析界面,如下
這種方式可以隨意開(kāi)始和結(jié)束調(diào)試的位置,所以適合具體代碼的性能排查。find貌似只支持小寫(xiě),所以如果查找JsonObject需要輸入jsonobject
b、使用DDMs
打開(kāi)devices窗口,選擇某個(gè)進(jìn)程,點(diǎn)擊右上角的start method profiling
? ? ? ? ? ? ? ? ? ? ?
運(yùn)行app一段時(shí)間后,再點(diǎn)擊已變成stop method profiling的該按鈕。eclipse會(huì)自動(dòng)彈出debug的標(biāo)簽(可通過(guò)菜單File->save as保存數(shù)據(jù))。界面同上面。
這種方式不需要修改代碼,所以對(duì)于沒(méi)有源碼的程序同樣可以進(jìn)行排查。同時(shí)可以方便的進(jìn)行全局性能排查。
2、TraceView界面信息介紹
TraceView界面包括時(shí)間面板和方法面板
(1) 時(shí)間面板(Timeline Panel)
時(shí)間面板展示了每個(gè)線程的執(zhí)行情況,其中的[1]main即為ui主線程。
移動(dòng)到某個(gè)位置可以查看該點(diǎn)對(duì)應(yīng)的方法的執(zhí)行信息,點(diǎn)擊方法面板則會(huì)選中相應(yīng)的方法。
可以左鍵按住不放選中區(qū)域放大局部精細(xì)查看,不同方法用不同顏色標(biāo)注
(2) 方法面板(Profile Panel)
方法面板展示了所有方法的執(zhí)行情況,點(diǎn)擊某個(gè)方法可以查看在對(duì)應(yīng)線程上的執(zhí)行時(shí)間區(qū)域,并會(huì)顯示其父方法及子方法。
每個(gè)方法包括如下信息列,可點(diǎn)擊某列進(jìn)行排序,從而確定產(chǎn)生性能問(wè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都是以毫秒計(jì)算。每列具體含義及作用如下:
a. Incl表示將所有子函數(shù)耗時(shí)也計(jì)算在內(nèi),Excl則表示不包括子函數(shù)的調(diào)用時(shí)間。對(duì)比可以確定耗時(shí)操作發(fā)生是自身還是子函數(shù)中。
b. Cpu Time表示占用cpu執(zhí)行的時(shí)間,Real Time包括Cpu Time以及等待、切換的時(shí)間等,所以一般都大于Cpu Time。對(duì)比可以判斷耗時(shí)操作是否在cpu執(zhí)行段內(nèi)。
c. 上面四個(gè)指標(biāo)對(duì)應(yīng)的%表示函數(shù)在總時(shí)間的占比。方便查看某個(gè)函數(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í),一般可通過(guò)簡(jiǎn)單此項(xiàng)確定每個(gè)函數(shù)的性能。
3、其他調(diào)優(yōu)工具
(1) dmtracedump
sdk tools下的另外一個(gè)工具dmtracedump可用于生成上述log文件內(nèi)的函數(shù)調(diào)用關(guān)系圖,不過(guò)在windows上稍微大點(diǎn)的文件即或報(bào)錯(cuò)
(2) visualvm
看到ddms提供了dump hprof file的功能,本來(lái)準(zhǔn)備生成hprof文件用visualvm打開(kāi)試試,結(jié)果一直打不開(kāi)..
在銀狐的幫忙下,發(fā)現(xiàn)android sdk tools dump的hprof需要經(jīng)過(guò)sdk tools下的hprof-conv轉(zhuǎn)換為標(biāo)準(zhǔn)的hprof文件,才能通過(guò)visualvm或eclipse的MemoryAnalyzer打開(kāi)進(jìn)行分析,之后就同java一樣了。hprof-conv格式為
hprof-conv <infile> <outfile>
總結(jié)
以上是生活随笔為你收集整理的Android性能调优工具TraceView的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 随机数算法_Java随机数算法
- 下一篇: Android hardware简易流程