Android應用性能優化

Android自帶的TraceView堪比java的性能調優工具visualvm線程視圖,可以方便的查看線程的執行情況,某個方法執行時間、調用次數、在總體中的佔比等,從而定位性能點。
1、生成日誌,運行TraceView
運行TraceView有兩種方式
a、調用Debug類
在開始調試的地方,如Activity的onCreate函數,添加

結束調試的地方,如Activity的onDestroy函數,添加

之後運行你的app一段時間並退出會在sd卡根目錄生成tracefilename.trace這個log文件,記錄這段時間內的運行信息。
將日誌文件pull到PC端,cmd到android sdk tools文件夾內(或綁定sdk tools目錄到系統path內),運行traceview tracefilename.trace即可打開TraceView分析界面,如下

android ddms
這種方式可以隨意開始和結束調試的位置,所以適合具體代碼的性能排查。find貌似只支持小寫,所以如果查找JsonObject需要輸入jsonobject

b、使用DDMs
打開devices窗口,選擇某個進程,點擊右上角的start method profilingddms trace

運行app一段時間後,再點擊已變成stop method profiling的該按鈕。eclipse會自動彈出debug的標籤(可通過菜單File->save as保存數據)。界面同上面。
這種方式不需要修改代碼,所以對於沒有源碼的程序同樣可以進行排查。同時可以方便的進行全局性能排查

2、TraceView界面信息介紹
TraceView界面包括時間面板和方法面板
(1) 時間面板(Timeline Panel)
時間面板展示了每個線程的執行情況,其中的[1]main即爲ui主線
程。
移動到某個位置可以查看該點對應的方法的執行信息,點擊方法面板則會選中相應的方法。
可以左鍵按住不放選中區域放大局部精細查看,不同方法用不同顏色標註

(2) 方法面板(Profile Panel)
方法面板展示了所有方法的執行情況,點擊某個方法可以查看在對應線程上的執行時間區域,並會顯示其父方法及子方法。

每個方法包括如下信息列,可點擊某列進行排序,從而確定產生性能問題的函數:
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表示將所有子函數耗時也計算在內,Excl則表示不包括子函數的調用時間。對比可以確定耗時操作發生是自身還是子函數中。
b. Cpu Time表示佔用cpu執行的時間,Real Time包括Cpu Time以及等待、切換的時間等,所以一般都大於Cpu Time。對比可以判斷耗時操作是否在cpu執行段內。
c. 上面四個指標對應的%表示函數在總時間的佔比。方便查看某個函數的時間佔比。
d. Calls+RecurCalls/Total表示被外部調用次數+遞歸次數/總次數。可以查看調用次數是否符合自己預期。
e. Cpu Time/Call, Real Time/Call表示總的Cpu Time及Real Time與總調用次數的比例。查看每次調用的耗時,一般可通過簡單此項確定每個函數的性能。

3、其他調優工具
(1) dmtracedump
sdk tools下的另外一個工具dmtracedump可用於生成上述log文件內的函數調用關係圖,不過在windows上稍微大點的文件即或報錯

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

在銀狐的幫忙下,發現android sdk tools dump的hprof需要經過sdk tools下的hprof-conv轉換爲標準的hprof文件,才能通過visualvm或eclipse的MemoryAnalyzer打開進行分析,之後就同java一樣了。hprof-conv格式爲

hprof-conv <infile> <outfile>

關於visualvm可以簡單的查看http://trinea.iteye.com/blog/1216170

之後會寫篇文章詳細的介紹visualvm和MemoryAnalyzer

發佈了51 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章