想開發(fā)一款高質(zhì)量的Android應(yīng)用棺妓,就不得不關(guān)注性能問(wèn)題蔬咬,本文介紹Android主要的性能指標(biāo)半醉,和性能優(yōu)化中用到的工具涂屁。
性能指標(biāo)主要有:
- 啟動(dòng)時(shí)間
- CPU:
- 耗電量:耗電量大會(huì)導(dǎo)致機(jī)器發(fā)熱、縮短機(jī)器的有效使用時(shí)長(zhǎng)
- 內(nèi)存:
內(nèi)存泄露:不使用的內(nèi)存空間一直被引用著沒(méi)有得到釋放甘穿。
內(nèi)存抖動(dòng):短時(shí)間內(nèi)大量創(chuàng)建對(duì)象又在短時(shí)間內(nèi)頻繁觸發(fā)GC導(dǎo)致內(nèi)存波動(dòng)很大腮恩,會(huì)影響幀率,導(dǎo)致頁(yè)面卡頓温兼。
內(nèi)存溢出:內(nèi)存泄漏到一定程度超出系統(tǒng)給進(jìn)程分配的內(nèi)存大小就會(huì)造成內(nèi)存溢出秸滴,程序崩潰 - ?募判?布局復(fù)雜度:布局復(fù)雜度會(huì)導(dǎo)致布局需要更長(zhǎng)的時(shí)間荡含,從而導(dǎo)致進(jìn)入應(yīng)用慢、頁(yè)面切換慢届垫。
- 網(wǎng)絡(luò):頻繁的網(wǎng)絡(luò)訪問(wèn)會(huì)導(dǎo)致耗電和影響應(yīng)用的性能释液,網(wǎng)絡(luò)交互數(shù)據(jù)大小會(huì)影響網(wǎng)絡(luò)傳輸?shù)男?/li>
本文介紹一些調(diào)試的工具。
1. Android手機(jī)自帶調(diào)試工具(在開發(fā)者選項(xiàng)里面)
1) Show GPU Overdraw(調(diào)試GPU過(guò)度繪制)
Overdraw(過(guò)度繪制)描述的是屏幕上的某個(gè)像素在同一幀的時(shí)間內(nèi)被繪制了多次装处。在多層次的UI結(jié)構(gòu)里面误债,如果不可見的UI也在做繪制的操作,這就會(huì)導(dǎo)致某些像素區(qū)域被繪制了多次妄迁。這就浪費(fèi)大量的CPU以及GPU資源寝蹈。
藍(lán)色,淡綠登淘,淡紅箫老,深紅代表了4種不同程度的Overdraw情況,我們的目標(biāo)就是盡量減少紅色Overdraw形帮,看到更多的藍(lán)色區(qū)域槽惫。
- Profile GPU Rendering(GPU呈現(xiàn)模式分析)
打開“開發(fā)者選項(xiàng)”周叮,找到“GPU呈現(xiàn)模式分析”,選擇“在主屏幕上顯示為條形圖”界斜,打開我們的應(yīng)用仿耽,在頁(yè)面底部可以看到垂直的柱形圖,柱形圖越高表示花費(fèi)的渲染時(shí)間越長(zhǎng)各薇。中間有一條綠色的橫線表示16ms项贺,我們要確保每一幀花費(fèi)的總時(shí)間都低于這條線,才能避免出現(xiàn)卡頓峭判。
每一條柱形圖包含三部分开缎,藍(lán)色表示測(cè)量繪制Display List的時(shí)間,紅色表示OpenGL渲染Display List需要的時(shí)間林螃,黃色表示CPU等待GPU處理的時(shí)間奕删。
- Show GPU view updates(顯示GPU視圖更新)
當(dāng)view中的繪制內(nèi)容發(fā)生變化時(shí),會(huì)重新執(zhí)行創(chuàng)建疗认、渲染完残、更新到屏幕等一系列操作。
當(dāng)GPU正在繪圖時(shí)横漏,閃爍顯示窗口中的視圖谨设。使用GPU繪制的區(qū)域會(huì)用紅色標(biāo)注,沒(méi)有紅色標(biāo)注的區(qū)域缎浇,是CPU繪制的扎拣。
從Android 3.0(API level 11)開始,Android的2D顯示管道被設(shè)計(jì)得更加支持硬件加速了素跺,硬件加速使GPU承擔(dān)了所有在View的canvas上執(zhí)行的繪制操作二蓝。
Android硬件加速原理與實(shí)現(xiàn)簡(jiǎn)介 - Strict Mode(嚴(yán)格模式)
Android應(yīng)用的主線程是UI線程,不應(yīng)該在UI線程里做耗時(shí)操作指厌。開啟“嚴(yán)格模式”侣夷,當(dāng)應(yīng)用在主線程做耗時(shí)操作時(shí),屏幕會(huì)閃爍來(lái)提醒仑乌。
- Android SDK提供的工具
-
Hierarchy viewer
層級(jí)顯示工具,可以用來(lái)查看界面布局結(jié)構(gòu)琴锭,找到復(fù)雜和嵌套過(guò)深的層級(jí)晰甚。
有兩種方法可以打開Hierarchy viewer
a. 打開sdk目錄下的tools文件夾,找到“Hierarchy viewer.bat”文件决帖,雙擊啟動(dòng)厕九。
b. 在Android Studio,打開Tools > Android > Android device Monitor地回,找到
QQ截圖20170216110301.png扁远,點(diǎn)擊左邊的圖標(biāo)俊鱼,選擇Hierarchy viewer。
找到當(dāng)前Activity的節(jié)點(diǎn)畅买,點(diǎn)擊Load View Hierarchy并闲。
Android Studio插件
說(shuō)一說(shuō)Android Studio和IDEA中一個(gè)很有用的內(nèi)存調(diào)試插件第三方軟件
GT(隨身調(diào))
可對(duì)APP進(jìn)行快速的性能測(cè)試(CPU、內(nèi)存谷羞、流量帝火、電量、幀率/流暢度等等)湃缎、開發(fā)日志的查看犀填、Crash日志查看、網(wǎng)絡(luò)數(shù)據(jù)包的抓取嗓违、APP內(nèi)部參數(shù)的調(diào)試九巡、真機(jī)代碼耗時(shí)統(tǒng)計(jì)等。
http://gt.qq.com/
- Leakcanary
- blockcanary
- stetho 可以在Chrome developer Tools下查看APP布局蹂季、網(wǎng)絡(luò)請(qǐng)求冕广、查看APP本地?cái)?shù)據(jù)庫(kù)、查看SharedPreference文件乏盐,這些都是可視化的佳窑。
http://facebook.github.io/stetho/
用法:http://stormzhang.com/android/2015/03/05/android-debug-use-chrome/
3)BugTags
https://bugtags.com/
可以方便上報(bào)日志,但是要查看實(shí)時(shí)日志的話父能,需要?jiǎng)?chuàng)建公司賬戶神凑。
個(gè)人技術(shù)水平有限,如有理解錯(cuò)誤還請(qǐng)指正 :)
擴(kuò)展閱讀:
Android性能優(yōu)化典范 - 第1季
Android性能優(yōu)化----工具篇
安卓性能優(yōu)化