想開發(fā)一款高質(zhì)量的Android應(yīng)用,就不得不關(guān)注性能問題,本文介紹Android主要的性能指標,和性能優(yōu)化中用到的工具。
性能指標主要有:
- 啟動時間
- CPU:
- 耗電量:耗電量大會導(dǎo)致機器發(fā)熱、縮短機器的有效使用時長
- 內(nèi)存:
內(nèi)存泄露:不使用的內(nèi)存空間一直被引用著沒有得到釋放。
內(nèi)存抖動:短時間內(nèi)大量創(chuàng)建對象又在短時間內(nèi)頻繁觸發(fā)GC導(dǎo)致內(nèi)存波動很大,會影響幀率,導(dǎo)致頁面卡頓。
內(nèi)存溢出:內(nèi)存泄漏到一定程度超出系統(tǒng)給進程分配的內(nèi)存大小就會造成內(nèi)存溢出,程序崩潰 - ??布局復(fù)雜度:布局復(fù)雜度會導(dǎo)致布局需要更長的時間,從而導(dǎo)致進入應(yīng)用慢、頁面切換慢。
- 網(wǎng)絡(luò):頻繁的網(wǎng)絡(luò)訪問會導(dǎo)致耗電和影響應(yīng)用的性能,網(wǎng)絡(luò)交互數(shù)據(jù)大小會影響網(wǎng)絡(luò)傳輸?shù)男?/li>
本文介紹一些調(diào)試的工具。
1. Android手機自帶調(diào)試工具(在開發(fā)者選項里面)
1) Show GPU Overdraw(調(diào)試GPU過度繪制)
Overdraw(過度繪制)描述的是屏幕上的某個像素在同一幀的時間內(nèi)被繪制了多次。在多層次的UI結(jié)構(gòu)里面,如果不可見的UI也在做繪制的操作,這就會導(dǎo)致某些像素區(qū)域被繪制了多次。這就浪費大量的CPU以及GPU資源。

藍色,淡綠,淡紅,深紅代表了4種不同程度的Overdraw情況,我們的目標就是盡量減少紅色Overdraw,看到更多的藍色區(qū)域。
- Profile GPU Rendering(GPU呈現(xiàn)模式分析)
打開“開發(fā)者選項”,找到“GPU呈現(xiàn)模式分析”,選擇“在主屏幕上顯示為條形圖”,打開我們的應(yīng)用,在頁面底部可以看到垂直的柱形圖,柱形圖越高表示花費的渲染時間越長。中間有一條綠色的橫線表示16ms,我們要確保每一幀花費的總時間都低于這條線,才能避免出現(xiàn)卡頓。
每一條柱形圖包含三部分,藍色表示測量繪制Display List的時間,紅色表示OpenGL渲染Display List需要的時間,黃色表示CPU等待GPU處理的時間。


- Show GPU view updates(顯示GPU視圖更新)
當view中的繪制內(nèi)容發(fā)生變化時,會重新執(zhí)行創(chuàng)建、渲染、更新到屏幕等一系列操作。
當GPU正在繪圖時,閃爍顯示窗口中的視圖。使用GPU繪制的區(qū)域會用紅色標注,沒有紅色標注的區(qū)域,是CPU繪制的。
從Android 3.0(API level 11)開始,Android的2D顯示管道被設(shè)計得更加支持硬件加速了,硬件加速使GPU承擔(dān)了所有在View的canvas上執(zhí)行的繪制操作。
Android硬件加速原理與實現(xiàn)簡介 - Strict Mode(嚴格模式)
Android應(yīng)用的主線程是UI線程,不應(yīng)該在UI線程里做耗時操作。開啟“嚴格模式”,當應(yīng)用在主線程做耗時操作時,屏幕會閃爍來提醒。
- Android SDK提供的工具
-
Hierarchy viewer
層級顯示工具,可以用來查看界面布局結(jié)構(gòu),找到復(fù)雜和嵌套過深的層級。
有兩種方法可以打開Hierarchy viewer
a. 打開sdk目錄下的tools文件夾,找到“Hierarchy viewer.bat”文件,雙擊啟動。
b. 在Android Studio,打開Tools > Android > Android device Monitor,找到
QQ截圖20170216110301.png,點擊左邊的圖標,選擇Hierarchy viewer。
找到當前Activity的節(jié)點,點擊Load View Hierarchy。



Android Studio插件
說一說Android Studio和IDEA中一個很有用的內(nèi)存調(diào)試插件第三方軟件
GT(隨身調(diào))
可對APP進行快速的性能測試(CPU、內(nèi)存、流量、電量、幀率/流暢度等等)、開發(fā)日志的查看、Crash日志查看、網(wǎng)絡(luò)數(shù)據(jù)包的抓取、APP內(nèi)部參數(shù)的調(diào)試、真機代碼耗時統(tǒng)計等。
http://gt.qq.com/
- Leakcanary
- blockcanary
- stetho 可以在Chrome developer Tools下查看APP布局、網(wǎng)絡(luò)請求、查看APP本地數(shù)據(jù)庫、查看SharedPreference文件,這些都是可視化的。
http://facebook.github.io/stetho/
用法:http://stormzhang.com/android/2015/03/05/android-debug-use-chrome/
3)BugTags
https://bugtags.com/
可以方便上報日志,但是要查看實時日志的話,需要創(chuàng)建公司賬戶。
個人技術(shù)水平有限,如有理解錯誤還請指正 :)
擴展閱讀:
Android性能優(yōu)化典范 - 第1季
Android性能優(yōu)化----工具篇
安卓性能優(yōu)化
