Android性能分析工具的使用
一、Android Studio-Memory Monitor
使用方法
run起你的項(xiàng)目,找到Memory Monitor窗口,選擇Memory
[轉(zhuǎn)]內(nèi)存變化波形圖
另外,還可選擇查看CPU和GPU還有NetWork的使用情況。
網(wǎng)絡(luò)使用波形圖.png
其中NetWork的頻繁使用是造成應(yīng)用耗電的關(guān)鍵,70%左右的電量是被上報(bào)數(shù)據(jù),檢查位置信息,定時(shí)檢索后臺(tái)廣告信息所使用掉的。如何平衡這兩者的電量消耗,就顯得非常重要了。
二、Android Studio 1.5 Preview 新玩具-Heap Snapshot
使用方法
同樣run起項(xiàng)目,進(jìn)行一些操作之后點(diǎn)擊左下角‘Dump Java Heap’的按鈕
每次點(diǎn)擊之后會(huì)生成一個(gè).hprof的文件
點(diǎn)擊一個(gè).hprof文件,查看右側(cè)的analyzer test,能看到兩個(gè)選項(xiàng)
一個(gè)是‘Detect Leaeked Activites’,另一個(gè)是'Find Duplicate Strings',點(diǎn)擊右上角的綠色播放按鈕,會(huì)自動(dòng)分析heap dump去定位泄露的activity和重復(fù)的string,出現(xiàn)如下的Analysis Results。
該面板里的信息可以有三種類(lèi)型:app heap/image heap/zygote heap.
分別代表app 堆內(nèi)存信息,圖片堆內(nèi)存信息,zygote進(jìn)程的堆內(nèi)存信息。
各屬性中英文對(duì)照表
名稱(chēng) | Total Count | Heap Count | Sizeof | Shallow size | Retained Size |
---|---|---|---|---|---|
意義 | 內(nèi)存中該類(lèi)的對(duì)象個(gè)數(shù) | 堆內(nèi)存中該類(lèi)的對(duì)象個(gè)數(shù) | 物理大小 | 對(duì)象本身占有內(nèi)存大小 | 釋放該對(duì)象后,節(jié)省的內(nèi)存大小 |
名稱(chēng) | depth | Shallow Size | Dominating Size |
---|---|---|---|
意義 | 深度 | 對(duì)象本身內(nèi)存大小 | 管轄的內(nèi)存大小 |
三、Eclipse-Allocation Tracker(分配跟蹤器)
使用方法
點(diǎn)擊“Start Tracking”,在應(yīng)用中執(zhí)行某個(gè)操作,然后點(diǎn)擊“Get Allocations”。
Allocation Tracker
特點(diǎn)
a.需要進(jìn)行間斷的操作
b.可定位到具體某一行代碼
四、hierarchyviewer
使用hierarchyviewer查看需要檢查的頁(yè)面的層次,檢查頁(yè)面最深層數(shù), 官方建議最好控制在10層以?xún)?nèi)
hierarchyviewer
布局層級(jí)優(yōu)化方案:
1). 自定義控件使用merge標(biāo)簽來(lái)減少不必要的根節(jié)點(diǎn);
2).使用drawbleleft,代替多添加一個(gè)imageview;
3).有時(shí)使用relativelayout會(huì)比linearlayout需要更少層次就能達(dá)到實(shí)現(xiàn)效果;
4).使用viewstub來(lái)隱藏控件,ViewStub中的布局只有在你需要的時(shí)候才會(huì)渲染到主界面中;
...
五、leakcanary(Android 和 Java 內(nèi)存泄露檢測(cè)框架)
AndroidStudio
https://github.com/square/leakcanary
Eclipse
https://github.com/SOFTPOWER1991/LeakcanarySample-Eclipse
六、手機(jī)設(shè)置->開(kāi)發(fā)者選項(xiàng)
1. Show GPU Overdraw
Show GPU Overdraw
藍(lán)色,淡綠,淡紅,深紅代表了4種不同程度的Overdraw情況,我們的目標(biāo)就是盡量減少紅色Overdraw,看到更多的藍(lán)色區(qū)域。
優(yōu)化方案:
Overdraw有時(shí)候是因?yàn)槟愕腢I布局存在大量重疊的部分,還有的時(shí)候是因?yàn)榉潜仨毜闹丿B背景。例如某個(gè)Activity有一個(gè)背景,然后里面 的Layout又有自己的背景,同時(shí)子View又分別有自己的背景。僅僅是通過(guò)移除非必須的背景圖片,這就能夠減少大量的紅色Overdraw區(qū)域,增加 藍(lán)色區(qū)域的占比。這一措施能夠顯著提升程序性能。
Profile GPU Rendering - 選中On screen as bars的選項(xiàng)
每一條柱狀線(xiàn)都包含三部分,藍(lán)色代表測(cè)量繪制Display List的時(shí)間,紅色代表OpenGL渲染Display List所需要的時(shí)間,黃色代表CPU等待GPU處理的時(shí)間。

中間有一根綠色的橫線(xiàn),代表16ms,我們需要確保每一幀花費(fèi)的總時(shí)間都低于這條橫線(xiàn),這樣才能夠避免出現(xiàn)卡頓的問(wèn)題。