Android studio的分析工具分為:CPU赤兴、Memory白对、NetWork逝慧、Energy.
CPU Profiler:
從Android profiler面板選擇指定設(shè)備和應(yīng)用程序進(jìn)入到CPU Profiler界面,我們能夠直觀的看到CPU的使用情況和線程的情況.
分別介紹下相關(guān)標(biāo)號(hào)的CPU Profiler的相關(guān)功能:
1.事件時(shí)間軸:表示當(dāng)前分析的應(yīng)用程序隨著用戶交互在不同活動(dòng)的變化狀態(tài) .
2.CPU狀態(tài):表示當(dāng)前應(yīng)用CPU使用率和系統(tǒng)及其他的CPU使用率.
3.線程活動(dòng)時(shí)間軸:列出當(dāng)前應(yīng)用的所有線程笑陈,并標(biāo)識(shí)出其在時(shí)間軸上的狀態(tài).
綠色:線程處于運(yùn)行狀態(tài)或者是可運(yùn)行狀態(tài);
黃色:線程處于活動(dòng)狀態(tài)葵袭,它正在等待I / O操作完成后繼續(xù)工作涵妥;
灰色:線程處于休眠狀態(tài),不會(huì)占用任何 CPU 時(shí)間.
4.方法跟蹤配置:選擇方法跟蹤的模式:
Sampled:一種基于數(shù)據(jù)抽樣的跟蹤坡锡,分析器會(huì)在應(yīng)用執(zhí)行期間頻繁地捕獲應(yīng)用程序的調(diào)用堆棧蓬网,通過收集比對(duì)捕獲到的數(shù)據(jù)集來獲得有關(guān)應(yīng)用程序代碼執(zhí)行的時(shí)間和資源使用信息窒所,適合跟蹤生命周期相對(duì)較長(zhǎng)的方法,如果應(yīng)用在捕獲調(diào)用堆棧后進(jìn)入一個(gè)函數(shù)并在下一次捕獲前退出該函數(shù)帆锋,則分析器不會(huì)記錄該函數(shù)調(diào)用.
Instrumented: 以函數(shù)調(diào)用時(shí)間為周期記錄,在運(yùn)行時(shí)設(shè)置應(yīng)用以在每個(gè)函數(shù)調(diào)用的開始和結(jié)束時(shí)記錄時(shí)間戳,它收集時(shí)間戳并進(jìn)行比較,以生成函數(shù)跟蹤數(shù)據(jù),包括時(shí)間信息和 CPU 使用率.與設(shè)置每個(gè)函數(shù)關(guān)聯(lián)的開銷會(huì)影響運(yùn)行時(shí)性能,并可能會(huì)影響分析數(shù)據(jù),對(duì)于生命周期相對(duì)較短的函數(shù),這一點(diǎn)更為明顯.如果應(yīng)用短時(shí)間內(nèi)執(zhí)行大量函數(shù),則分析器可能會(huì)迅速超出它的文件大小限制,且不能再記錄更多的跟蹤數(shù)據(jù)吵取。
Edit configurations:允許更改上述“Sampled”和“Instrumented”記錄配置的某些默認(rèn)值,并將它們另存為自定義配置。
5. 用于開始和停止記錄函數(shù)跟蹤.
6.放大/縮小時(shí)間線
7.跳轉(zhuǎn)至實(shí)時(shí)時(shí)間線
記錄、檢查函數(shù)跟蹤
在4處選擇Sampled或者Instrumented撞叨,然后在5處開始記錄函數(shù)跟蹤,再結(jié)束函數(shù)跟蹤:
從圖中可以發(fā)現(xiàn)有四種方式檢查函數(shù)跟蹤:
Call Chart
水平軸表示函數(shù)調(diào)用(或調(diào)用方)的時(shí)間臣疑,并沿垂直軸顯示其被調(diào)用者。 對(duì)系統(tǒng) API 的函數(shù)調(diào)用顯示為橙色徙菠,對(duì)應(yīng)用自有函數(shù)的調(diào)用顯示為綠色,對(duì)第三方 API(包括 Java 語(yǔ)言 API)的函數(shù)調(diào)用顯示為藍(lán)色郁岩。 下圖展示了一個(gè)調(diào)用圖表示例婿奔,并描繪了給定函數(shù)的 Self time、Children time 以及總時(shí)間的概念问慎。
相關(guān)函數(shù)可以右鍵Jump to source.
Flame Chart
Flame Chart 標(biāo)簽提供一個(gè)倒置的調(diào)用圖表萍摊,其中水平軸不再代表時(shí)間線,它表示每個(gè)函數(shù)相對(duì)的執(zhí)行時(shí)間如叼。
Top Down
Top Down 標(biāo)簽顯示一個(gè)函數(shù)調(diào)用列表冰木,在該列表中展開函數(shù)節(jié)點(diǎn)會(huì)顯示函數(shù)的被調(diào)用方.
左邊顯示了函數(shù)調(diào)用列表,右邊分別顯示了函數(shù)執(zhí)行時(shí)間和函數(shù)執(zhí)行的被調(diào)用方所花時(shí)間笼恰,和總時(shí)間.
Bottom Up
標(biāo)簽顯示一個(gè)函數(shù)調(diào)用列表踊沸,在該列表中展開函數(shù)節(jié)點(diǎn)將顯示函數(shù)的調(diào)用方.
Memory Profiler:
內(nèi)存分析,根據(jù)進(jìn)入內(nèi)存分析界面社证,先介紹CPU界面沒有的指標(biāo):
1:用于強(qiáng)制內(nèi)存回收.
2:抓取進(jìn)程內(nèi)存的dump信息.
3:內(nèi)存分配的占比及對(duì)象個(gè)數(shù).
4:虛線表示對(duì)象的分配數(shù).
5:拉動(dòng)時(shí)間線選取待分析的時(shí)間段的內(nèi)存信息.
6:內(nèi)存信息.
從6中可以觀察到類的信息逼龟,點(diǎn)擊相關(guān)類可以觀察到對(duì)象信息,點(diǎn)擊相關(guān)實(shí)例追葡,可以觀察到調(diào)用棧信息腺律,點(diǎn)擊調(diào)用棧可以跳轉(zhuǎn)至相關(guān)代碼.
內(nèi)存分配:
可以查看的信息:分配哪些類型的對(duì)象以及它們使用多少空間宜肉,每個(gè)分配的堆疊追蹤匀钧,包括在哪個(gè)線程中,對(duì)象在何時(shí)被取消分配(Android 8.0+)谬返。
捕獲堆轉(zhuǎn)儲(chǔ)
堆轉(zhuǎn)儲(chǔ)顯示在捕獲堆轉(zhuǎn)儲(chǔ)時(shí)應(yīng)用中哪些對(duì)象正在使用內(nèi)存之斯,尤其是在長(zhǎng)時(shí)間的用戶會(huì)話后,堆轉(zhuǎn)儲(chǔ)會(huì)顯示您認(rèn)為不應(yīng)再位于內(nèi)存中卻仍在內(nèi)存中的對(duì)象朱浴,從而識(shí)別內(nèi)存泄漏吊圾,在捕獲堆轉(zhuǎn)儲(chǔ)后达椰,可以查看以下信息:
應(yīng)用已分配哪些類型的對(duì)象,以及每個(gè)類型分配多少;每個(gè)對(duì)象正在使用多少內(nèi)存;在代碼中的何處仍在引用每個(gè)對(duì)象;對(duì)象所分配到的調(diào)用堆棧(目前项乒,如果在記錄分配時(shí)捕獲堆轉(zhuǎn)儲(chǔ)啰劲,則只有在 Android 7.1 及更低版本中,堆轉(zhuǎn)儲(chǔ)才能使用調(diào)用堆棧)
要捕獲堆轉(zhuǎn)儲(chǔ)檀何,在 Memory Profiler 工具欄中點(diǎn)擊 Dump Java heap 蝇裤,在轉(zhuǎn)儲(chǔ)期間,Java 內(nèi)存量可能會(huì)暫時(shí)增加频鉴,這很正常栓辜,因?yàn)槎艳D(zhuǎn)儲(chǔ)與您的應(yīng)用發(fā)生在同一進(jìn)程中,并需要一些內(nèi)存來收集數(shù)據(jù)垛孔。
在類列表中藕甩,可以查看以下信息:
Shallow Size:此堆中所有實(shí)例的總大小(以字節(jié)為單位)周荐。
Retained Size:為此類的所有實(shí)例而保留的內(nèi)存總大邢晾场(以字節(jié)為單位)
在類列表頂部,可以使用左側(cè)下拉列表在以下堆轉(zhuǎn)儲(chǔ)之間進(jìn)行切換:
Default heap:系統(tǒng)未指定堆時(shí)概作。
App heap:應(yīng)用在其中分配內(nèi)存的主堆腋妙。
Image heap:系統(tǒng)啟動(dòng)映像,包含啟動(dòng)期間預(yù)加載的類讯榕。 此處的分配保證絕不會(huì)移動(dòng)或消失
Zygote heap:寫時(shí)復(fù)制堆骤素,其中的應(yīng)用進(jìn)程是從 Android 系統(tǒng)中派生的。
默認(rèn)情況下愚屁,此列表按 Retained Size 列排序济竹,可以點(diǎn)擊任意列標(biāo)題以更改列表的排序方式。
在 Instance View 中霎槐,每個(gè)實(shí)例都包含以下信息:
Depth:從任意 GC root 到所選實(shí)例的最短 hop 數(shù)规辱。
Shallow Size:此實(shí)例的大小。
Retained Size:此實(shí)例支配的內(nèi)存大小栽燕。
將堆轉(zhuǎn)儲(chǔ)另存為 HPROF
右鍵將堆轉(zhuǎn)儲(chǔ)導(dǎo)出到一個(gè) HPROF 文件中罕袋,在顯示的對(duì)話框中,確保使用 .hprof 后綴保存文件;然后碍岔,通過將此文件拖到一個(gè)空的編輯器窗口就可以在 Android Studio 中打開該文件浴讯。
要使用其他 HPROF 分析器(如 jhat),需要將 HPROF 文件Android 格式轉(zhuǎn)換為 Java SE HPROF 格式蔼啦。 可以使用 android_sdk/platform-tools/ 目錄中的 hprof-conv 工具執(zhí)行此操作榆纽。 運(yùn)行該命令需要兩個(gè)參數(shù):原始 HPROF 文件和轉(zhuǎn)換后 HPROF 文件的寫入位置。 例如:
hprof-conv heap-original.hprof heap-converted.hprof
Network Profiler
時(shí)間線上顯示實(shí)時(shí)網(wǎng)絡(luò) Activity,包括發(fā)送和接收的數(shù)據(jù)以及當(dāng)前的連接數(shù)奈籽,便于查看應(yīng)用傳輸數(shù)據(jù)的方式和時(shí)間饥侵,并據(jù)此對(duì)底層代碼進(jìn)行適當(dāng)優(yōu)化。
選擇相應(yīng)的時(shí)間段衣屏,對(duì)網(wǎng)絡(luò)的請(qǐng)求躏升,響應(yīng)和調(diào)用棧以及網(wǎng)絡(luò)狀況進(jìn)行分析.
Energy Profiler
打開Energy Profiler時(shí),它會(huì)立即開始顯示應(yīng)用程序的估計(jì)能耗:查看CPU狼忱,網(wǎng)絡(luò)和位置(GPS)資源以及相關(guān)系統(tǒng)事件的能耗分類膨疏,請(qǐng)將鼠標(biāo)指針放在 能源時(shí)間軸中的條上