Android性能分析之 Profiler

Android studio的分析工具分為:CPU赤兴、Memory白对、NetWork逝慧、Energy.

CPU Profiler:

從Android profiler面板選擇指定設(shè)備和應(yīng)用程序進(jìn)入到CPU Profiler界面,我們能夠直觀的看到CPU的使用情況和線程的情況.


image.png

分別介紹下相關(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ù)跟蹤:

image.png

從圖中可以發(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í)間如叼。
image.png

Top Down
Top Down 標(biāo)簽顯示一個(gè)函數(shù)調(diào)用列表冰木,在該列表中展開函數(shù)節(jié)點(diǎn)會(huì)顯示函數(shù)的被調(diào)用方.
image.png

左邊顯示了函數(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)用方.
image.png

Memory Profiler:

內(nèi)存分析,根據(jù)進(jìn)入內(nèi)存分析界面社证,先介紹CPU界面沒有的指標(biāo):

image.png

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ù)垛孔。


image.png

在類列表中藕甩,可以查看以下信息:

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)化。


image.png

選擇相應(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í)間軸中的條上


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钻弄,隨后出現(xiàn)的幾起案子佃却,更是在濱河造成了極大的恐慌,老刑警劉巖窘俺,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲帅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瘤泪,警方通過查閱死者的電腦和手機(jī)洒闸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來均芽,“玉大人,你說我怎么就攤上這事单鹿∠扑危” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵仲锄,是天一觀的道長(zhǎng)劲妙。 經(jīng)常有香客問我,道長(zhǎng)儒喊,這世上最難降的妖魔是什么镣奋? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮怀愧,結(jié)果婚禮上侨颈,老公的妹妹穿的比我還像新娘。我一直安慰自己芯义,他們只是感情好哈垢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扛拨,像睡著了一般耘分。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天求泰,我揣著相機(jī)與錄音央渣,去河邊找鬼。 笑死渴频,一個(gè)胖子當(dāng)著我的面吹牛芽丹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枉氮,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼志衍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了聊替?” 一聲冷哼從身側(cè)響起楼肪,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惹悄,沒想到半個(gè)月后春叫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泣港,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年暂殖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片当纱。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呛每,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坡氯,到底是詐尸還是另有隱情晨横,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布箫柳,位于F島的核電站手形,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悯恍。R本人自食惡果不足惜库糠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涮毫。 院中可真熱鬧瞬欧,春花似錦、人聲如沸罢防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)篙梢。三九已至顷帖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贬墩。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工榴嗅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶舞。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓嗽测,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親肿孵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唠粥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355