AndroidProfiler不妨供給對(duì)于運(yùn)用CPU、外存和搜集的及時(shí)數(shù)據(jù)。
一.啟用領(lǐng)會(huì)
要翻開(kāi)AndroidProfiler窗口,請(qǐng)按以次辦法操縱:
1.點(diǎn)擊東西欄中的AndroidProfiler(也不妨點(diǎn)擊View>ToolWindows>AndroidProfiler)。
2.在AndroidProfiler窗口頂部采用想要領(lǐng)會(huì)的擺設(shè)和運(yùn)用過(guò)程,如次圖所示。
上海圖書館中各個(gè)數(shù)字對(duì)應(yīng)的含意:
①要領(lǐng)會(huì)的擺設(shè)。
②要領(lǐng)會(huì)的運(yùn)用過(guò)程。
③功夫線縮放控件。
④及時(shí)革新跳轉(zhuǎn)按鈕。
⑤Event功夫線,囊括Activity狀況、用戶輸出Event和屏幕回旋Event。
即使表露“Advancedprofilingisunavailablefortheselectedprocess”,不妨在高層?xùn)|西欄中式點(diǎn)心擊Profile‘app‘來(lái)運(yùn)轉(zhuǎn),大概在運(yùn)轉(zhuǎn)擺設(shè)中起用高檔領(lǐng)會(huì),按以次辦法操縱:
1.采用Run>EditConfigurations。
2.在左側(cè)窗格中采用您的運(yùn)用模塊。
3.點(diǎn)擊Profiling標(biāo)簽,而后勾選Enableadvancedprofiling。
從新建立并運(yùn)轉(zhuǎn)運(yùn)用即可。
二.CPUProfiler
CPUProfiler可扶助及時(shí)查看運(yùn)用的CPU運(yùn)用率和線程Activity,并記載因變量盯梢,再不優(yōu)化和調(diào)節(jié)和測(cè)試運(yùn)用代碼。
2.1CPUProfiler大概瀏覽
如上海圖書館所示,CPUProfiler的默許視圖囊括以次實(shí)質(zhì):
①Event功夫線:表露運(yùn)用中在其人命周期變換的Activity,并表露用戶與擺設(shè)的交互,囊括屏幕回旋Event。
②CPU功夫線:表露運(yùn)用的及時(shí)CPU運(yùn)用率(占總可用CPU功夫的百分比)以及運(yùn)用運(yùn)用的總線程數(shù)。此功夫線還表露其余過(guò)程的CPU運(yùn)用率(如體例過(guò)程或其余運(yùn)用),再不不妨將其與本人的運(yùn)用運(yùn)用率舉行比較。經(jīng)過(guò)沿功夫線的程度軸挪動(dòng)鼠標(biāo),還不妨查看汗青CPU運(yùn)用率數(shù)據(jù)。
③線程Activity功夫線:列出屬于運(yùn)用過(guò)程的每個(gè)線程。底下證明各別的臉色對(duì)應(yīng)的含意:
綠色:表白線程居于震動(dòng)狀況或籌備運(yùn)用CPU。即,它正在“運(yùn)轉(zhuǎn)中”或居于“可運(yùn)轉(zhuǎn)”狀況。黃色:表白線程居于震動(dòng)狀況,但它正在等候一個(gè)I/O操縱(如磁盤或搜集I/O),而后本領(lǐng)實(shí)行它的處事。灰色:表白線程正在睡眠且沒(méi)有耗費(fèi)任何CPU功夫。當(dāng)線程須要考察尚不行用的資源時(shí)偶然會(huì)爆發(fā)這種情景。線程加入自決睡眠或內(nèi)核將此線程置于睡眠狀況,直到所需的資源可用。④記載擺設(shè):采用領(lǐng)會(huì)器記載因變量盯梢的辦法,如次:
Sampled:以恒定周期記載。在運(yùn)用實(shí)行功夫一再捕捉運(yùn)用的挪用倉(cāng)庫(kù)。領(lǐng)會(huì)器比擬捕捉的數(shù)據(jù)集以推導(dǎo)與運(yùn)用代碼實(shí)行相關(guān)的功夫和資源運(yùn)用消息。鑒于“Sampled”的盯梢的題目是,即使運(yùn)用在捕捉挪用倉(cāng)庫(kù)保守入一個(gè)因變量并鄙人一次捕捉前退出該因變量,則領(lǐng)會(huì)器不會(huì)記載該因變量挪用。即使對(duì)該類人命周期很短的盯梢因變量感愛(ài)好,應(yīng)運(yùn)用“Instrumented”盯梢。Instrumented:以因變量挪用功夫?yàn)橹芷谟涊d。在運(yùn)轉(zhuǎn)時(shí)樹(shù)立運(yùn)用以在每個(gè)因變量挪用的發(fā)端和中斷時(shí)記載功夫戳。它搜集功夫戳并舉行比擬,以天生因變量盯梢數(shù)據(jù),囊括功夫消息和CPU運(yùn)用率。提防,與樹(shù)立每個(gè)因變量關(guān)系的開(kāi)支會(huì)感化運(yùn)轉(zhuǎn)時(shí)本能,并大概會(huì)感化領(lǐng)會(huì)數(shù)據(jù),對(duì)于人命周期對(duì)立較短的因變量,這一點(diǎn)更為鮮明。其余,即使運(yùn)用短功夫內(nèi)實(shí)行洪量因變量,則領(lǐng)會(huì)器大概會(huì)趕快勝過(guò)它的文獻(xiàn)巨細(xì)控制,且不許再記載更多的盯梢數(shù)據(jù)。Editconfigurations:承諾變動(dòng)上述“Sampled”和“Instrumented”記載擺設(shè)的某些默許值,并將它們另存為自設(shè)置擺設(shè)。⑤記載按鈕:用來(lái)發(fā)端和遏止記載因變量盯梢。
注:領(lǐng)會(huì)器還會(huì)匯報(bào)AndroidStudio和Android平臺(tái)增添到您的運(yùn)用過(guò)程(如JDWP、ProfileSaver、Studio:VMStats、Studio:Perfa以及Studio:Heartbeat)的線程CPU運(yùn)用率。
2.2記載和查看因變量盯梢
采用Sampled或Instrumented,而后點(diǎn)擊Record發(fā)端記載因變量盯梢,點(diǎn)擊Stoprecording中斷,如次圖所示。
①采用功夫范疇:決定要在盯梢窗格中查看所記載功夫范疇的哪一局部。當(dāng)初次記載因變量盯梢時(shí),CPUProfiler將在CPU功夫線中機(jī)動(dòng)采用完備長(zhǎng)度。即使想僅查看所記載功夫范疇第一小學(xué)局部的因變量盯梢數(shù)據(jù),不妨點(diǎn)擊并拖動(dòng)超過(guò)表露的地區(qū)邊際以竄改其長(zhǎng)度。
②功夫戳:用來(lái)表白所記載因變量盯梢的發(fā)端和中斷功夫(對(duì)立于領(lǐng)會(huì)器從擺設(shè)發(fā)端搜集CPU運(yùn)用率消息的功夫)。不妨點(diǎn)擊功夫戳以機(jī)動(dòng)采用完備記載。
③盯梢窗格:用來(lái)表露所選的功夫范疇和線程的因變量盯梢數(shù)據(jù)。
④經(jīng)過(guò)挪用圖表、火苗圖、TopDown樹(shù)或BottomUp樹(shù)的情勢(shì)表露因變量盯梢。
⑤決定怎樣丈量每個(gè)因變量挪用的功夫消息:
Wallclocktime:本質(zhì)過(guò)程的功夫。Threadtime:本質(zhì)過(guò)程的功夫減去線程沒(méi)有耗費(fèi)CPU資源的功夫。2.2.1運(yùn)用CallChart標(biāo)簽查看盯梢
CallChart標(biāo)簽供給因變量盯梢的圖形表白情勢(shì),個(gè)中,程度軸表白因變量挪用(或挪用方)的功夫,并沿筆直軸表露其被挪用者。對(duì)體例API的因變量挪用表露為橙色,對(duì)運(yùn)用自有因變量的挪用表露為綠色,對(duì)第三方API(囊括Java談話API)的因變量挪用表露為藍(lán)色。下圖展現(xiàn)了一個(gè)挪用圖表白例,并刻畫了給定因變量的Selftime、Childrentime以及總功夫的觀念。
提醒:若要跳轉(zhuǎn)到某個(gè)因變量的源代碼,請(qǐng)右鍵點(diǎn)擊該因變量并采用JumptoSource。
2.2.2運(yùn)用FlameChart標(biāo)簽查看盯梢
FlameChart標(biāo)簽供給一個(gè)顛倒的挪用圖表,個(gè)中程度軸不復(fù)代辦功夫線,它表白每個(gè)因變量對(duì)立的實(shí)行功夫。
底下證明此觀念,商量下圖中的挪用圖表。提防因變量D屢次挪用B(B1、B2和B3),個(gè)中少許對(duì)B的挪用也挪用了C(C1和C3)。
因?yàn)锽1、B2和B3共享溝通的挪用方程序(A→D→B),所以可將它們匯總在一道,如次所示。同樣,將C1和C3匯總在一道,由于它們也共享溝通的挪用方程序(A→D→B→C)。提防未包括C2,由于它具備各別的挪用方程序(A→D→C)。
匯總的因變量挪用用來(lái)創(chuàng)造火苗圖,如次圖所示。提防,對(duì)于火苗圖中任何給定的因變量挪用,開(kāi)始表露耗費(fèi)最多CPU功夫的被挪用方。
2.2.3運(yùn)用TopDown和BottomUp查看盯梢
TopDown標(biāo)簽表露一個(gè)因變量挪用列表,在該列表中打開(kāi)因變量節(jié)點(diǎn)會(huì)表露因變量的被挪用方。下圖表露上頭挪用圖表對(duì)應(yīng)的“TopDown”圖表。圖表中的每個(gè)箭鏃都從挪用方指向被挪用方。
如上海圖書館所示,在“TopDown”標(biāo)簽中打開(kāi)因變量A的節(jié)點(diǎn)可表露它的被挪用方,即因變量B和D。而后,打開(kāi)因變量D的節(jié)點(diǎn)可表露它的被挪用方,即因變量B和C之類。
TopDown標(biāo)簽供給以次消息以證明在每個(gè)因變量挪用上所耗費(fèi)的CPU功夫:
Self:表白因變量挪用在實(shí)行本人的代碼(而非被挪用方的代碼)上所花的功夫。Children:表白因變量挪用在實(shí)行本人的被挪用方(而非本人的代碼)上所花的功夫。總和:因變量的Self和Children功夫的總和。表白運(yùn)用在實(shí)行因變量挪用上所花的總功夫。BottomUp標(biāo)簽表露一個(gè)因變量挪用列表,在該列表中打開(kāi)因變量節(jié)點(diǎn)將表露因變量的挪用方,如次圖所示。
如上海圖書館所示,在“BottomUp”樹(shù)中翻開(kāi)因變量C的節(jié)點(diǎn)可表露它的挪用方B和D。提防,縱然B挪用C兩次,但在“BottomUp”樹(shù)中打開(kāi)因變量C的節(jié)點(diǎn)時(shí),B僅表露一次。而后,打開(kāi)B的節(jié)點(diǎn)表露其挪用方,即因變量A和D。
注:當(dāng)領(lǐng)會(huì)器達(dá)到文獻(xiàn)巨細(xì)控制時(shí),AndroidStudio將遏止搜集新數(shù)據(jù)(但不會(huì)遏止記載)。
2.3創(chuàng)造記載擺設(shè)
要?jiǎng)?chuàng)造或編纂自設(shè)置擺設(shè),或查看現(xiàn)有的默許擺設(shè),可經(jīng)過(guò)記載擺設(shè)下拉菜單中采用Editconfigurations來(lái)翻開(kāi)CPURecordingConfigurations對(duì)話框,如次圖所示。
不妨在左側(cè)窗格中采用現(xiàn)有擺設(shè)來(lái)查看其樹(shù)立,也可按如次辦法創(chuàng)造一個(gè)新的記載擺設(shè):
1.點(diǎn)擊對(duì)話框左上角的?。
2.為擺設(shè)定名。
3.在TraceTechnology局部采用Sampled或Instrumented。
4.對(duì)于“Sampled”記載擺設(shè),以微秒(μs)為單元指定Samplinginterval。此值表白運(yùn)用挪用倉(cāng)庫(kù)的每個(gè)取樣之間的連接功夫。
5.對(duì)于寫入貫穿擺設(shè)的記載數(shù)據(jù),以兆字節(jié)(MB)為單元指定Filesizelimit。當(dāng)您遏止記載時(shí),AndroidStudio將領(lǐng)會(huì)此數(shù)據(jù)并將其表露在領(lǐng)會(huì)器窗口中。
注:即使運(yùn)用運(yùn)轉(zhuǎn)API級(jí)別26或更高本子的貫穿擺設(shè),則對(duì)于盯梢數(shù)據(jù)的文獻(xiàn)巨細(xì)沒(méi)有控制,此值可忽視。
6.點(diǎn)擊Apply或OK。即使變動(dòng)了其余記載擺設(shè),則也將生存那些變動(dòng)。
三.MemoryProfiler
MemoryProfiler是可扶助辨別引導(dǎo)運(yùn)用卡頓、停止以至解體的外存揭發(fā)和流逝。它表露一個(gè)運(yùn)用外存運(yùn)用量的及時(shí)圖表,不妨捕捉堆轉(zhuǎn)儲(chǔ)、強(qiáng)迫實(shí)行廢物接收以及盯梢外存調(diào)配。
3.1MemoryProfiler大概瀏覽
如上海圖書館所示,MemoryProfiler的默許視圖囊括以次各項(xiàng):
①?gòu)?qiáng)迫實(shí)行廢物接收Event。
②捕捉堆轉(zhuǎn)儲(chǔ)。
③記載外存調(diào)配情景。此按鈕僅在運(yùn)轉(zhuǎn)Android7.1或更低本子的擺設(shè)時(shí)才會(huì)表露。
④夸大/減少功夫線。
⑤跳轉(zhuǎn)至及時(shí)外存數(shù)據(jù)。
⑥Event功夫線,其表露Activity狀況、用戶輸出Event和屏幕回旋Event。
⑦外存運(yùn)用量功夫線,包括以次實(shí)質(zhì):
表露每個(gè)外存類型運(yùn)用幾何外存的堆疊圖表,如左側(cè)的y軸以及頂部的彩色鍵所示。虛線表白調(diào)配的東西數(shù),如右側(cè)的y軸所示。用來(lái)表白每個(gè)廢物接收Event的圖標(biāo)。如上海圖書館,外存計(jì)數(shù)中的類型如次所示:
Java:從Java或Kotlin代碼調(diào)配的東西外存。Native:從C或C++代碼調(diào)配的東西外存。Graphics:圖形緩沖區(qū)部隊(duì)向屏幕表露像素(囊括GL外表、GL紋理之類)所運(yùn)用的外存。(提防,這是與CPU共享的外存,不是GPU專用外存。)Stack:運(yùn)用中的原生倉(cāng)庫(kù)和Java倉(cāng)庫(kù)運(yùn)用的外存,常常與運(yùn)用運(yùn)轉(zhuǎn)幾何線程相關(guān)。Code:運(yùn)用用來(lái)處置代碼和資源(如dex字節(jié)碼、已優(yōu)化或已編寫翻譯的dex碼、.so庫(kù)和字體)的外存。Other:運(yùn)用運(yùn)用的體例不決定怎樣分門別類的外存。Allocated:運(yùn)用調(diào)配的Java/Kotlin東西數(shù)。沒(méi)有計(jì)入C或C++中調(diào)配的東西。注:暫時(shí),MemoryProfiler還會(huì)表露運(yùn)用中的少許誤報(bào)的原生外存運(yùn)用量,而那些外存本質(zhì)上是領(lǐng)會(huì)東西運(yùn)用的。對(duì)于大概100000個(gè)東西,最多會(huì)使匯報(bào)的外存運(yùn)用量減少10MB。
3.2察看外存調(diào)配
MemoryProfiler可表露相關(guān)東西調(diào)配的以次消息:
調(diào)配哪些典型的東西以及它們運(yùn)用幾何空間。每個(gè)調(diào)配的堆疊躡蹤,囊括在哪個(gè)線程中。東西在何時(shí)被廢除調(diào)配(Android8.0+)。即使擺設(shè)運(yùn)轉(zhuǎn)Android8.0或更高本子,不妨依照下述本領(lǐng)察看東西調(diào)配:只需點(diǎn)擊并按住功夫線,并拖動(dòng)采用想要察看調(diào)配的地區(qū),如次圖所示:
即使擺設(shè)運(yùn)轉(zhuǎn)Android7.1或更低本子,則在MemoryProfiler東西欄中式點(diǎn)心擊Recordmemoryallocations。操縱實(shí)行后,點(diǎn)擊Stoprecording以察看調(diào)配。如次圖所示:
在采用一個(gè)功夫線地區(qū)后,已調(diào)配東西的列表將表露在功夫線下方,按類稱呼舉行分批,并按其堆計(jì)數(shù)排序。
注:在Android7.1及更低本子上,最多不妨記載65535個(gè)調(diào)配。即使記載勝過(guò)此限值,則記載中僅生存最新的65535個(gè)調(diào)配。在Android8.0及更高本子中,沒(méi)有此控制。
要查看調(diào)配記載,請(qǐng)按以次辦法操縱:
1.欣賞列表以搜索堆計(jì)數(shù)特殊大且大概生存揭發(fā)的東西。點(diǎn)擊ClassName列題目不妨按假名程序排序。而后點(diǎn)擊一個(gè)類稱呼。此時(shí)在右側(cè)將展示InstanceView窗格,表露該類的每個(gè)范例。
2.在InstanceView窗格中,點(diǎn)擊一個(gè)范例。此時(shí)下方將展示CallStack標(biāo)簽,表露該范例被調(diào)配到何處以及在哪個(gè)線程中,如次圖所示。
3.在CallStack標(biāo)簽中,雙擊大肆行以在編纂器中跳轉(zhuǎn)到該代碼。
默許情景下,左側(cè)的調(diào)配列表按類稱呼陳設(shè)。在列表頂部,不妨運(yùn)用右側(cè)的下拉列表在以次陳設(shè)辦法之間舉行切換:
Arrangebyclass:鑒于類稱呼對(duì)一切調(diào)配舉行分批。Arrangebypackage:鑒于軟硬件包稱呼對(duì)一切調(diào)配舉行分批。Arrangebycallstack:將一切調(diào)配分批到其對(duì)應(yīng)的挪用倉(cāng)庫(kù)。3.3捕捉堆轉(zhuǎn)儲(chǔ)
堆轉(zhuǎn)儲(chǔ)表露在捕捉堆轉(zhuǎn)儲(chǔ)時(shí)運(yùn)用中哪些東西正在運(yùn)用外存。更加是在長(zhǎng)功夫的用戶對(duì)話后,堆轉(zhuǎn)儲(chǔ)會(huì)表露您覺(jué)得不應(yīng)再坐落外存中卻仍在外存中的東西,進(jìn)而扶助辨別外存揭發(fā)。在捕捉堆轉(zhuǎn)儲(chǔ)后,不妨察看以次消息:
運(yùn)用已調(diào)配哪些典型的東西,以及每個(gè)典型調(diào)配幾何。每個(gè)東西正在運(yùn)用幾何外存。在代碼中的何處仍在援用每個(gè)東西。東西所調(diào)配到的挪用倉(cāng)庫(kù)。(暫時(shí),即使在記載調(diào)配時(shí)捕捉堆轉(zhuǎn)儲(chǔ),則惟有在Android7.1及更低本子中,堆轉(zhuǎn)儲(chǔ)本領(lǐng)運(yùn)用挪用倉(cāng)庫(kù)。)要捕捉堆轉(zhuǎn)儲(chǔ),在MemoryProfiler東西欄中式點(diǎn)心擊DumpJavaheap。在轉(zhuǎn)儲(chǔ)堆功夫,Java外存量大概會(huì)姑且減少,這很平常,由于堆轉(zhuǎn)儲(chǔ)與您的運(yùn)用爆發(fā)在同一過(guò)程中,并須要少許外存來(lái)搜集數(shù)據(jù)。
堆轉(zhuǎn)儲(chǔ)表露在外存功夫線下,表露堆中的一切類典型,如次圖所示。
要查看堆,請(qǐng)按以次辦法操縱:
1.欣賞列表以搜索堆計(jì)數(shù)特殊大且大概生存揭發(fā)的東西。點(diǎn)擊ClassName列題目不妨按假名程序排序。而后點(diǎn)擊一個(gè)類稱呼。此時(shí)在右側(cè)將展示InstanceView窗格,表露該類的每個(gè)范例。
2.在InstanceView窗格中,點(diǎn)擊一個(gè)范例,此時(shí)下方將展示References,表露該東西的每個(gè)援用。點(diǎn)擊范例稱呼旁的箭鏃不妨察看其一切字段,而后點(diǎn)擊一個(gè)字段稱呼察看其一切援用。即使要察看某個(gè)字段的范例確定,右鍵點(diǎn)擊該字段并采用GotoInstance,如次圖所示。
3.在References標(biāo)簽中,即使創(chuàng)造某個(gè)援用大概在揭發(fā)外存,則右鍵點(diǎn)擊它并采用GotoInstance。
在類列表中,不妨察看以次消息:
HeapCount:堆中的范例數(shù)。ShallowSize:此堆中一切范例的總巨細(xì)(以字節(jié)為單元)。RetainedSize:為該類的一切范例而保持的外存總巨細(xì)(以字節(jié)為單元)。在類列表頂部,不妨運(yùn)用左側(cè)下拉列表在以次堆轉(zhuǎn)儲(chǔ)之間舉行切換:
Defaultheap:體例未指定堆時(shí)。Appheap:運(yùn)用在個(gè)中調(diào)配外存的主堆。Imageheap:體例啟用映像,包括啟用功夫預(yù)加載的類。此處的調(diào)配保護(hù)絕不會(huì)挪動(dòng)或消逝。Zygoteheap:寫時(shí)復(fù)制堆,個(gè)中的運(yùn)用過(guò)程是從Android體例中派生的。默許情景下,此列表按RetainedSize列排序,不妨點(diǎn)擊大肆列題目以變動(dòng)列表的排序辦法。
在InstanceView中,每個(gè)范例都包括以次消息:
Depth:從大肆GCroot到所選范例的最短hop數(shù)。ShallowSize:此范例的巨細(xì)。RetainedSize:此范例安排的外存巨細(xì)。3.4將堆轉(zhuǎn)儲(chǔ)另存為HPROF
即使要生存堆轉(zhuǎn)儲(chǔ)以供遙遠(yuǎn)察看,可經(jīng)過(guò)點(diǎn)擊功夫線下方東西欄中的ExportheapdumpasHPROFfile,將堆轉(zhuǎn)儲(chǔ)導(dǎo)出到一個(gè)HPROF文獻(xiàn)中。在表露的對(duì)話框中,保證運(yùn)用.hprof后綴生存文獻(xiàn)。而后,經(jīng)過(guò)將此文獻(xiàn)拖到一個(gè)空的編纂器窗口就不妨在AndroidStudio中翻開(kāi)該文獻(xiàn)。
要運(yùn)用其余HPROF領(lǐng)會(huì)器(如jhat),須要將HPROF文獻(xiàn)從Android***變換為JavaSEHPROF***。不妨運(yùn)用android_sdk/platform-tools/目次中的hprof-conv東西實(shí)行此操縱。運(yùn)轉(zhuǎn)該吩咐須要兩個(gè)參數(shù):原始HPROF文獻(xiàn)和變換后HPROF文獻(xiàn)的寫入場(chǎng)所。比方:
hprof-convheap-original.hprofheap-converted.hprof
3.5領(lǐng)會(huì)外存揭發(fā)示例
底下舉例證明怎樣領(lǐng)會(huì)外存揭發(fā)。下圖點(diǎn)擊中央“加入外存揭發(fā)Activity”按鈕,不妨加入一個(gè)爆發(fā)外存揭發(fā)的Activity,底下展現(xiàn)怎樣經(jīng)過(guò)MemoryProfiler找到爆發(fā)外存揭發(fā)的類并定位到爆發(fā)揭發(fā)的代碼。
開(kāi)始,咱們不妨重復(fù)加入和退出外存揭發(fā)Activity,而后在MemoryProfiler中強(qiáng)迫廢物接收,之后捕捉堆轉(zhuǎn)儲(chǔ)。待領(lǐng)會(huì)截止出來(lái)后,不妨點(diǎn)擊右側(cè)的挑選按鈕,挑選咱們關(guān)心的包名,如次圖所示:
也不妨在“Arrangebyclass”處采用“Arrangebypackage”來(lái)舉行手動(dòng)采用。
不妨看到有3個(gè)MemoryLeakActivity東西,按說(shuō)說(shuō)退出它們并GC之后不該當(dāng)在外存中。咱們單擊那一條龍,右側(cè)會(huì)表露每個(gè)范例,點(diǎn)擊個(gè)中一個(gè)范例,底下會(huì)表露其援用,如次圖所示:
咱們不妨雙擊第一個(gè)援用,大概右鍵點(diǎn)擊采用“JumptoSource”,就不妨定位到爆發(fā)外存揭發(fā)的代碼,如次:
如許一個(gè)外存揭發(fā)的領(lǐng)會(huì)進(jìn)程就中斷了。
四.NetworkProfiler
NetworkProfiler不妨在功夫線上表露及時(shí)搜集Activity,囊括發(fā)送和接受的數(shù)據(jù)以及暫時(shí)的貫穿數(shù),便于察看運(yùn)用傳輸數(shù)據(jù)的辦法和功夫,并據(jù)此對(duì)底層代碼舉行符合優(yōu)化。
4.1NetworkProfiler大概瀏覽
如上海圖書館所示,窗口頂部表露的是Event功夫線以及無(wú)線安裝功耗狀況(低/高)與WLAN的比較①。在功夫線上,不妨點(diǎn)擊并拖動(dòng)采用功夫線的一局部來(lái)查看搜集流量②。下方的窗口③會(huì)表露在功夫線的選定片斷內(nèi)收發(fā)的文獻(xiàn),囊括文獻(xiàn)稱呼、巨細(xì)、典型、狀況和功夫。不妨點(diǎn)擊大肆列題目排序。同聲,還不妨察看功夫線選定片斷的明細(xì)數(shù)據(jù),表露每個(gè)文獻(xiàn)的發(fā)送和接受功夫。
點(diǎn)擊搜集貫穿的稱呼即可察看相關(guān)所發(fā)送或接受的選定文獻(xiàn)的精細(xì)消息④。點(diǎn)擊各個(gè)標(biāo)簽可察看相應(yīng)數(shù)據(jù)、題目消息和挪用倉(cāng)庫(kù)。
注:NetworkProfiler暫時(shí)只扶助HttpURLConnection和OkHttp搜集貫穿庫(kù)。