這篇文章給大家介紹如何使用AndroidProfiler中的cpumemorynetwork分析器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
為霍邱等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及霍邱網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、霍邱網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
一、 CPU分析器CPU Profiler
CPU分析器可幫助您實(shí)時檢查應(yīng)用程序的CPU使用情況和線程活動,并記錄方法跟蹤,以便您可以優(yōu)化和調(diào)試應(yīng)用程序的代碼。
要打開CPU Profiler,請按照下列步驟操作:
點(diǎn)擊 View > Tool Windows > Android Profiler (還可以點(diǎn)擊工具欄的).
從Android Profiler工具欄中選擇要配置的設(shè)備和應(yīng)用程序進(jìn)程(如果您已通過USB連接設(shè)備但未看到它,請確保已啟用USB調(diào)試)
單擊CPU時間軸中的任意位置打開CPU Profiler。
1.1 為什么要優(yōu)化CPU的使用
優(yōu)化CPU使用率有許多優(yōu)點(diǎn),例如提供更快更流暢的用戶體驗(yàn),并保持設(shè)備電池壽命。它還可以幫助您的應(yīng)用程序在各種較新舊的設(shè)備上運(yùn)行良好,您可以使用CPU分析器在與應(yīng)用程序交互時監(jiān)視CPU使用情況和線程活動,但是,有關(guān)應(yīng)用程序執(zhí)行代碼的更詳細(xì)信息,應(yīng)記錄并檢查方法跟蹤。
對于應(yīng)用程序進(jìn)程中的每個線程,您可以找到在一段時間內(nèi)執(zhí)行哪些方法以及每個方法在執(zhí)行期間消耗的CPU資源。您還可以使用方法跟蹤來識別調(diào)用者和被調(diào)用者,調(diào)用者是一種調(diào)用另一種方法的方法,被調(diào)用方是另一種方法調(diào)用的方法。您可以使用此信息來確定哪些方法太頻繁地調(diào)用特定資源繁重的任務(wù),就可以嘗試優(yōu)化應(yīng)用程序的代碼以避免不必要的工作。
如果要收集詳細(xì)的系統(tǒng)級數(shù)據(jù),幫助您檢查本地系統(tǒng)進(jìn)程并解決由丟幀引起的UI jank,則應(yīng)使用Systrace。或者,如果要導(dǎo)出使用Debug捕獲的.trace文件,則應(yīng)使用Traceview
1.2 CPU Profiler概述
當(dāng)您打開CPU分析器時,它會立即開始顯示應(yīng)用程序的CPU使用情況和線程活動。你會看到類似于下圖的內(nèi)容
①Event timeline: 顯示您的應(yīng)用程序在其生命周期中轉(zhuǎn)換不同狀態(tài)的活動,并指示用戶與設(shè)備的交互,包括屏幕旋轉(zhuǎn)事件。要了解有關(guān)事件時間軸的更多信息,包括如何啟用它,請閱讀我上一篇文章說到的啟用高級分析
②CPU timeline: 顯示您的應(yīng)用程序的實(shí)時CPU使用率(占總可用CPU的百分比)以及應(yīng)用程序使用的線程總數(shù),時間軸還顯示其他進(jìn)程的CPU使用情況(如系統(tǒng)進(jìn)程或其他應(yīng)用程序),所以您可以將其與應(yīng)用程序的使用情況進(jìn)行比較。您可以通過沿著時間軸的水平軸移動鼠標(biāo)來檢查歷史CPU使用率數(shù)據(jù)。
③Thread activity timeline: 列出屬于您的應(yīng)用程序進(jìn)程的每個線程,并使用不同的顏色在時間軸上指示其活動。記錄方法跟蹤后,可以從此時間軸中選擇一個線程,在跟蹤窗格中檢查其數(shù)據(jù)。
綠色: 線程處于活動狀態(tài)或準(zhǔn)備好使用CPU。也就是說,它處于”運(yùn)行”或”可運(yùn)行”狀態(tài)。
黃色: 線程處于活動狀態(tài),但是在完成其工作之前,它正在等待I / O操作(如文件或網(wǎng)絡(luò)I / O)。
灰色: 線程正在睡眠,不會消耗任何CPU時間,當(dāng)線程需要訪問尚未可用的資源時,有時會發(fā)生這種情況。要么線程進(jìn)入自愿性睡眠,要么內(nèi)核使線程休眠,直到所需的資源可用。
④Tracing type:允許您選擇以下選項(xiàng)之一來確定分析器如何記錄方法跟蹤。
Sampled: 在應(yīng)用程序執(zhí)行期間,您可以頻繁地捕獲應(yīng)用程序的調(diào)用堆棧。profiler將捕獲的數(shù)據(jù)集進(jìn)行比較,以獲取關(guān)于應(yīng)用程序代碼執(zhí)行的時間和資源使用信息?;趕ampled跟蹤的一個固有問題是,如果您的應(yīng)用程序在捕獲調(diào)用堆棧并在下一次捕獲之前退出該方法,那么該方法調(diào)用不會被分析器記錄。如果您對具有這樣短生命周期的跟蹤方法感興趣,您應(yīng)該使用工具跟蹤。
Instrumented: 在您的應(yīng)用程序運(yùn)行時記錄每個方法調(diào)用的開始和結(jié)束時的時間戳。收集時間戳并與生成方法跟蹤數(shù)據(jù)進(jìn)行比較,包括時間信息和CPU使用。請注意,對每種方法進(jìn)行檢測的開銷會影響運(yùn)行時性能,并可能影響性能分析,因此對于具有相對較短的生命周期的方法來說,這更加值得注意。此外,如果您的應(yīng)用程序在短時間內(nèi)執(zhí)行大量的方法,profiler可能很快超過它的文件大小限制,進(jìn)而不能記錄任何進(jìn)一步的跟蹤數(shù)據(jù)。
⑤Record button:開始和停止記錄方法跟蹤。要了解更多信息,請繼續(xù)看下去
提示:profiler還報告了Android Studio和Android平臺在你的應(yīng)用程序過程中添加的線程的CPU使用情況,如JDWP、Profile Saver、Studio:VMStats、Studio:Perfa和Studio:Heartbeat(盡管,在線程活動時間線中顯示的確切名稱可能會有所不同)。這意味著您的應(yīng)用程序在CPU時間軸上的CPU使用率也會報告這些線程使用的CPU時間。您可以在線程活動時間表中看到這些線程,并監(jiān)視它們的活動。(但是,由于profiler線程執(zhí)行native代碼,因此無法為它們記錄方法跟蹤數(shù)據(jù)。)Android Studio會報告這些數(shù)據(jù),這樣你就可以很容易地識別出線程活動和CPU使用實(shí)際上是由你的應(yīng)用程序代碼引起的。
1.3 記錄和檢查方法跟蹤
要開始記錄方法跟蹤,從下拉菜單中選擇Sampled或Instrumented類型,然后單擊Record開始進(jìn)行記錄,完成后點(diǎn)擊Stop recording停止記錄。profiler自動選擇記錄的時間幀,并在方法跟蹤窗格中顯示它的跟蹤信息,如下圖所示。如果要檢查不同線程的方法跟蹤,只需從線程活動時間軸中選擇它。
① Selected time frame: 在跟蹤窗格中檢查的記錄時間框架的部分。當(dāng)您第一次記錄一個方法跟蹤時,CPU分析器將自動選擇您在CPU時間線中記錄的整個長度。如果要檢查僅記錄的時間幀的一部分的方法跟蹤數(shù)據(jù),您可以單擊并拖動高亮顯示區(qū)域的邊緣來修改它的長度。
②Timestamp: 表示記錄方法跟蹤的開始和結(jié)束時間(相對于profiler開始從設(shè)備收集CPU使用信息時)。你可以點(diǎn)擊時間戳來自動選擇整個記錄作為你選定的時間框架——如果你有多個你想要轉(zhuǎn)換的記錄,這是非常有用的。
③Trace pane:顯示您所選擇的時間框架和線程的方法跟蹤數(shù)據(jù)。僅當(dāng)您記錄至少一個方法跟蹤后,此窗格才會顯示。在此窗格中,您可以選擇如何查看每個堆棧跟蹤(使用跟蹤選項(xiàng)卡)以及如何測量執(zhí)行時間(使用時間參考下拉菜單)。
④: 選擇顯示為Top Down tree, Bottom Up tree, Call Chart, or Flame Chart這些類型的圖。您可以在下面的部分中了解有關(guān)每個跟蹤窗格選項(xiàng)卡的更多信息。
從下拉菜單中選擇以下選項(xiàng)之一,以確定如何測量每個方法調(diào)用的時序信息:
Wall clock time: 表示實(shí)際經(jīng)過時間。
Thread time:計時信息表示實(shí)際的消耗時間減去不消耗CPU資源的那段時間的任何部分。對于任何給定的方法,它的線程時間總是小于或等于它的時鐘時間。使用線程時間讓您更好地了解給定方法所消耗的線程實(shí)際CPU使用量
1.3.1 使用Call Chart選項(xiàng)卡檢查跟蹤
Call Chart選項(xiàng)卡提供一個方法跟蹤的圖形表示,其中一個方法調(diào)用(或調(diào)用者)的周期和時間在水平軸上表示,而它的callees則顯示在垂直軸上。對系統(tǒng)api的方法調(diào)用以橙色顯示,調(diào)用您的應(yīng)用程序自己的方法以綠色顯示,方法調(diào)用第三方api(包括java語言api)以藍(lán)色顯示。下面的圖顯示了一個示例調(diào)用圖,并說明了給定方法的自時間、子時間和總時間的概念。關(guān)于如何使用自上而下和自下而上檢查痕跡的部分,請繼續(xù)看下去
提示: 如果想要跳轉(zhuǎn)到方法的源代碼,請右鍵單擊該方法,然后選擇Jump to Source。這可以從任何窗格選項(xiàng)卡工作。
1.3.2 使用火焰圖表(Flame Chart)選項(xiàng)卡檢查痕跡
火焰圖選項(xiàng)卡提供了一個反向調(diào)用圖表,聚合了相同的調(diào)用堆棧。也就是說,收集相同的調(diào)用序列的相同方法被收集并表示為火焰圖中的一個較長的欄(而不是將它們顯示為多個更短的條,如調(diào)用圖所示)。這樣就更容易看出哪些方法消耗的時間最多。然而,這也意味著橫軸不再表示時間軸,相反,它表示每個方法執(zhí)行的相對時間。
為了幫助說明這個概念,考慮下面圖4中的調(diào)用圖表。注意,方法D對B(B1、B2和B3)進(jìn)行多次調(diào)用,其中一些調(diào)用B對C(C1和C3)進(jìn)行調(diào)用。
因?yàn)锽1、B2和B3共享相同的序列調(diào)用者(A→D→B)聚合,如下所示。同樣,C1和C3聚合,因?yàn)樗鼈児蚕硐嗤男蛄姓{(diào)用者(A→D→B→C)注意不包括C2,因?yàn)樗胁煌恼{(diào)用者序列(A→D→C)。
聚合方法調(diào)用用于創(chuàng)建flame 圖,如下圖所示。注意,對于任何給定的方法調(diào)用,在flame圖中,消耗最多CPU時間的callees首先出現(xiàn)。
1.3.3 使用自上而下和自下而上檢查
Top Down選項(xiàng)卡顯示方法調(diào)用的列表,擴(kuò)展方法節(jié)點(diǎn)顯示其callees。下圖顯示了上面的圖3中調(diào)用圖的頂部向下圖。圖中的每個箭頭都是從調(diào)用者到callee。
下圖所示,在頂部的down選項(xiàng)卡中擴(kuò)展方法A的節(jié)點(diǎn)將顯示它的callees、方法B和D。在此之后,擴(kuò)展方法D的節(jié)點(diǎn)將暴露它的callees、方法B和C,等等。與火焰圖選項(xiàng)卡類似,頂部向下的樹聚合跟蹤信息,用于共享相同調(diào)用堆棧的相同方法。也就是說,火焰圖標(biāo)簽提供了頂部下標(biāo)簽的圖形表示。
Top Down選項(xiàng)卡提供以下信息,以幫助描述在每個方法調(diào)用上花費(fèi)的CPU時間(在選定的時間段內(nèi),時間也代表線程總時間的百分比):
Self:方法調(diào)用用于執(zhí)行自己的代碼而不是它的callees的時間量,如上面的圖3所示。
Children:方法調(diào)用花費(fèi)的時間用于執(zhí)行其被調(diào)用者,而不是其自己的代碼,如圖3中的方法D所示。
Total:方法的Self和Children的時間的總和。這表示應(yīng)用程序執(zhí)行方法調(diào)用的總時間量,如圖3所示的方法D。
Bottom Up選項(xiàng)卡顯示一個方法調(diào)用列表,擴(kuò)展方法的節(jié)點(diǎn)顯示其調(diào)用者。使用上圖所示的例子中,下圖提供了一個自下而上方法C .在自下而上的樹中打開方法C的節(jié)點(diǎn),顯示每個獨(dú)特的調(diào)用者,方法B和d .注意,雖然B兩次調(diào)用C,B當(dāng)擴(kuò)大節(jié)點(diǎn)只出現(xiàn)一次自下而上方法C的樹。再此之后,展開節(jié)點(diǎn)B顯示其調(diào)用者方法A和D.
Bottom Up選項(xiàng)卡對于那些消耗最多(或最少)CPU時間的方法的排序方法很有用。您可以檢查每個節(jié)點(diǎn),以確定哪些調(diào)用者在調(diào)用這些方法上花費(fèi)最多的CPU時間。與上面的樹相比,底部樹中每個方法的定時信息都是在每棵樹的頂部(頂部節(jié)點(diǎn))的方法。在記錄期間,CPU時間也被表示為線程總時間的百分比。下表有助于解釋如何解釋頂級節(jié)點(diǎn)及其調(diào)用方方法(子節(jié)點(diǎn))的定時信息。
對于給定的記錄,當(dāng)profiler達(dá)到文件大小限制時,Android Studio停止收集新數(shù)據(jù)(但是這并沒有停止記錄)。這種情況在執(zhí)行檢測跟蹤時通常會發(fā)生得更快,因?yàn)檫@種類型的跟蹤會在較短的時間內(nèi)收集更多的數(shù)據(jù),而不是取樣跟蹤。如果將檢查時間幀擴(kuò)展到在到達(dá)限制后發(fā)生的記錄期間,那么跟蹤窗格中的計時數(shù)據(jù)不會發(fā)生變化(因?yàn)闆]有可用的新數(shù)據(jù))。此外,當(dāng)您只選擇沒有可用數(shù)據(jù)的記錄的部分時,跟蹤窗格將顯示NaN用于計時信息。
二、 內(nèi)存分析器memory profiler
內(nèi)存分析器是Android Profiler中的一個組件,它可以幫助您識別內(nèi)存泄漏和內(nèi)存溢出,從而導(dǎo)致存根、凍結(jié)甚至應(yīng)用程序崩潰。它顯示了應(yīng)用程序內(nèi)存使用的實(shí)時圖,讓您捕獲堆轉(zhuǎn)儲、強(qiáng)制垃圾收集和跟蹤內(nèi)存分配。
要打開內(nèi)存分析器和cpu檢查器一樣,就在隔壁。
2.1 為什么使用內(nèi)存分析器
Android提供了一個托管內(nèi)存環(huán)境——當(dāng)它確定你的應(yīng)用不再使用某些對象時,垃圾收集器會將未使用的內(nèi)存釋放回堆。在所有Android版本的某個點(diǎn)上,系統(tǒng)必須短暫地暫停代碼。大多數(shù)時候,停頓是不可察覺的。但是,如果你的應(yīng)用程序分配內(nèi)存的速度快于系統(tǒng)收集的速度,你的應(yīng)用程序可能會被延遲,而收集器釋放了足夠的內(nèi)存來滿足你的分配。延遲可能會導(dǎo)致應(yīng)用程序跳過幀并導(dǎo)致明顯的慢速。
即使你的應(yīng)用程序沒有表現(xiàn)出緩慢,如果它泄露了內(nèi)存,它仍然可以保留那個內(nèi)存,即使它在后臺。通過強(qiáng)制不必要的垃圾收集事件,這種行為可以降低系統(tǒng)內(nèi)存性能的其他部分。最終,系統(tǒng)不得不殺死你的應(yīng)用程序來回收內(nèi)存。然后當(dāng)用戶返回到你的應(yīng)用程序時,它必須重新啟動。
為了幫助防止這些問題,您應(yīng)該使用內(nèi)存分析器來執(zhí)行以下操作:
在可能導(dǎo)致性能問題的時間軸中尋找不良的內(nèi)存分配模式
Dump Java堆,以便在任何時間查看哪些對象正在使用內(nèi)存。長時間的堆轉(zhuǎn)儲可以幫助識別內(nèi)存泄漏。
在正常和極端的用戶交互過程中記錄內(nèi)存分配,以精確地確定您的代碼在短時間內(nèi)分配的對象或分配被泄漏的對象。
有關(guān)可以減少應(yīng)用程序內(nèi)存使用的編程實(shí)踐的信息,請參閱管理應(yīng)用程序的內(nèi)存。
2.2 內(nèi)存分析器概述
如上圖所示,內(nèi)存分析器的默認(rèn)視圖包括以下內(nèi)容:
① 強(qiáng)制執(zhí)行垃圾收集事件的按鈕。
② 捕獲堆轉(zhuǎn)儲的按鈕。
③ 記錄內(nèi)存分配的按鈕。
④ 放大時間線的按鈕。
⑤ 跳轉(zhuǎn)到實(shí)時內(nèi)存數(shù)據(jù)的按鈕。
⑥ 事件時間線顯示活動狀態(tài)、用戶輸入事件和屏幕旋轉(zhuǎn)事件。
⑦ 內(nèi)存使用時間表,其中包括以下內(nèi)容:
每個內(nèi)存類別使用多少內(nèi)存的堆棧圖,如左邊的y軸和頂部的顏色鍵所示。
虛線表示已分配對象的數(shù)量,如右側(cè)y軸所示。
每個垃圾收集事件的圖標(biāo)。
但是,默認(rèn)情況下并不是所有的分析數(shù)據(jù)都可見。如果您看到一條消息,說“高級分析不可用于所選進(jìn)程”,則需要啟用高級分析以查看以下內(nèi)容:
活動時間表
分配對象的數(shù)量
垃圾收集事件
提示: 與之前的Android監(jiān)控工具相比,新的內(nèi)存分析器記錄了你的內(nèi)存使用情況,所以看起來你的內(nèi)存使用量會更高。內(nèi)存分析器監(jiān)視一些額外的類別,這些類別增加了總數(shù),但如果您只關(guān)心Java堆內(nèi)存,那么“Java”的數(shù)字應(yīng)該與上一個Android監(jiān)視器的值類似。新的號碼記錄了從Zygote分派到應(yīng)用程序的Java堆中的所有物理內(nèi)存頁面,這準(zhǔn)確表示您的應(yīng)用程序?qū)嶋H使用多少物理內(nèi)存。
2.3 記錄內(nèi)存分配
查看堆轉(zhuǎn)儲時,查看分配了多少內(nèi)存的快照很有用,它不會顯示如何分配內(nèi)存。為此,您需要記錄內(nèi)存分配。完成記錄會話后,您可以看到以下記錄的持續(xù)時間:
分配了哪些對象以及它們使用了多少空間。
在堆棧跟蹤中分配每個對象的位置,其中包括線程。
要查看應(yīng)用程序的內(nèi)存分配,請單擊內(nèi)存分析器工具欄中的Record memory allocations。當(dāng)它記錄時,與你的應(yīng)用程序進(jìn)行交互,以引起內(nèi)存溢出或內(nèi)存泄漏。完成后,單擊Stop recording。
分配的對象列表出現(xiàn)在時間軸下面,按類名稱分組,按堆計數(shù)排序,如上圖所示。
分配跟蹤器最多記錄65535個分配。如果您的記錄超出此限制,則只有最近65535個分配將保存在該記錄中。
要檢查分配記錄,請按照下列步驟操作:
瀏覽列表以查找具有非常大的堆計數(shù)且可能泄漏的對象,要幫助查找已知類,請單擊類名列標(biāo)題按字母順序排序。然后單擊一個類名,Instance View 窗格就會顯示在右側(cè),顯示該類的每個實(shí)例,如下圖所示。
在Instance View窗格中,單擊一個實(shí)例。Call Stack選項(xiàng)卡顯示在下面,顯示了哪個實(shí)例被分配在哪個線程中。
在Call Stack選項(xiàng)卡中,單擊任意行可以在編輯器中跳轉(zhuǎn)到該代碼。
默認(rèn)情況下,列表是按類名排列的。在列表的頂部,您可以使用右下拉菜單在列表之間切換:
Arrange by class: 根據(jù)類名分配。
Arrange by package:根據(jù)包名分配。
Arrange by callstack: 根據(jù)調(diào)用堆棧排序
2.4 捕獲堆轉(zhuǎn)儲
堆轉(zhuǎn)儲顯示在捕獲堆轉(zhuǎn)儲時應(yīng)用程序正在使用內(nèi)存的對象。特別是在擴(kuò)展用戶會話之后,堆轉(zhuǎn)儲可以通過顯示仍然在內(nèi)存中的對象來幫助識別內(nèi)存泄漏。捕獲堆轉(zhuǎn)儲后,可以查看以下內(nèi)容:
您的應(yīng)用程序分配了哪些類型的對象,以及每個對象的數(shù)量。
每個對象使用多少內(nèi)存
每個對象的引用被保留在你的代碼中。
調(diào)用堆棧,用于分配對象的位置(只有在記錄分配時捕獲堆轉(zhuǎn)儲)。
要捕獲堆轉(zhuǎn)儲,單擊Memory-Profiler工具欄中的dump Java堆。在轉(zhuǎn)儲堆時,Java內(nèi)存的數(shù)量可能會暫時增加。這是正常的,因?yàn)槎艳D(zhuǎn)儲發(fā)生在與應(yīng)用程序相同的進(jìn)程中,需要一些內(nèi)存來收集數(shù)據(jù)。
堆轉(zhuǎn)儲出現(xiàn)在內(nèi)存時間軸下方,顯示堆中的所有類類型,如上圖所示。
要檢查你的堆,請按照下列步驟操作:
瀏覽列表以查找具有異常大堆計數(shù)的對象,因?yàn)樗赡軙恍孤丁榱藥椭檎乙阎?,請單擊類名列?biāo)題以按字母順序排序。然后單擊類名。實(shí)例視圖窗格出現(xiàn)在右邊,顯示該類的每個實(shí)例,如下圖所示。
在Instance View窗格中,單擊一個實(shí)例。 References選項(xiàng)卡顯示在下面,顯示對該對象的所有引用?;蛘邌螕魧?shí)例名稱旁邊的箭頭以查看其所有字段,然后單擊字段名稱以查看其所有引用。如果要查看某個字段的實(shí)例詳細(xì)信息,請右鍵單擊該字段,然后選擇Go to Instance。
在References選項(xiàng)卡中,如果識別可能是內(nèi)存泄漏的引用,請右鍵單擊它,然后選擇Go to Instance.。這將從堆轉(zhuǎn)儲中選擇相應(yīng)的實(shí)例,顯示您自己的實(shí)例數(shù)據(jù)。
默認(rèn)情況下,堆轉(zhuǎn)儲不會顯示每個已分配對象的堆棧跟蹤。要獲取堆棧跟蹤,您必須在單擊轉(zhuǎn)儲Java堆之前開始記錄內(nèi)存分配。如果您這樣做,您可以在實(shí)例視圖中選擇一個實(shí)例,并在References選項(xiàng)卡旁邊看到Call Stack選項(xiàng)卡,如下圖所示。但是,在開始記錄分配之前,可能已經(jīng)分配了一些對象,因此這些對象無法使用調(diào)用堆棧。包含一個調(diào)用堆棧的實(shí)例在圖標(biāo)上有一個stack標(biāo)記。
在classes列表中,您可以看到以下信息:
Heap Count: 堆中的實(shí)例數(shù)。
Shallow Size: 此堆中所有實(shí)例的總大?。ㄒ宰止?jié)為單位)。
Retained Size: 這個類的所有實(shí)例(以字節(jié)為單位)保留的內(nèi)存總大小。
在類列表的頂部,可以使用左下拉列表在以下堆轉(zhuǎn)儲之間切換:
Default heap: 當(dāng)系統(tǒng)沒有指定堆時。
App heap: 應(yīng)用程序分配內(nèi)存的主堆。
Image heap: 系統(tǒng)引導(dǎo)映像,包含在引導(dǎo)期間預(yù)加載的類。這里的分配保證永遠(yuǎn)不會移動或離開。
Zygote heap: Android系統(tǒng)中分發(fā)應(yīng)用程序進(jìn)程的寫時復(fù)制堆
默認(rèn)情況下,列表按保留大小列排序。您可以單擊任何列標(biāo)題來更改列表的排序方式。
在Instance View中,每個實(shí)例包括以下內(nèi)容:
Depth:從任何GC根到所選實(shí)例的跳數(shù)最短。
Shallow Size:此實(shí)例的大小。
Retained Size:此實(shí)例支配的內(nèi)存大小(根據(jù)支配者樹)。
三、 網(wǎng)絡(luò)分析器(Network Profiler)
網(wǎng)絡(luò)分析器在時間軸上顯示實(shí)時網(wǎng)絡(luò)活動,顯示發(fā)送和接收的數(shù)據(jù),以及當(dāng)前連接的數(shù)量。這讓您可以檢查應(yīng)用程序如何和何時傳輸數(shù)據(jù),并適當(dāng)?shù)貎?yōu)化底層代碼。
打開面板的步驟和上面的幾乎一致。
3.1 為什么要使用網(wǎng)絡(luò)分析器
當(dāng)應(yīng)用程序向網(wǎng)絡(luò)發(fā)出請求時,設(shè)備必須使用耗電的移動或WiFi無線電來發(fā)送和接收數(shù)據(jù)包。接收器不僅使用電力傳輸數(shù)據(jù),而且還使用額外的電源打開和保持喚醒。
使用網(wǎng)絡(luò)分析器,您可以查找頻繁的、短的網(wǎng)絡(luò)活動高峰,這意味著您的應(yīng)用程序要求網(wǎng)絡(luò)經(jīng)常打開,或者長時間保持喚醒,以處理許多短的請求。這一模式表明,您可以通過批處理網(wǎng)絡(luò)請求來優(yōu)化應(yīng)用程序,以改善電池性能,從而減少網(wǎng)絡(luò)必須打開或接收數(shù)據(jù)的次數(shù)。這也使得網(wǎng)絡(luò)可以切換到低功率模式,以節(jié)省電池的時間間隔。
有關(guān)優(yōu)化應(yīng)用程序網(wǎng)絡(luò)活動的技術(shù)的更多信息,請參閱 Reducing Network Battery Drain。
3.2 網(wǎng)絡(luò)分析器概述
在窗口的頂部,您可以看到事件時間線和①無線電電源狀態(tài)(high/low)和wi-fi。在時間軸上,您可以單擊和拖動來選擇②時間軸的一部分來檢查流量。下面的③窗口顯示在時間軸的選定部分中發(fā)送和接收的文件,包括文件名、大小、類型、狀態(tài)和時間。您可以通過單擊任何列標(biāo)題來對列表進(jìn)行排序。您還可以看到時間線所選部分的詳細(xì)分解,顯示每個文件被發(fā)送或接收的時間。
單擊連接的名稱,查看所選文件發(fā)送或接收的詳細(xì)信息。單擊④選項(xiàng)卡查看響應(yīng)數(shù)據(jù)、頭信息或調(diào)用堆棧。
提示:您必須啟用高級概要分析來選擇時間軸的一部分來檢查,查看發(fā)送和接收的文件的列表,或者查看所選文件發(fā)送或接收的詳細(xì)信息。為了啟用高級分析,請查看上一篇文章
3.3 網(wǎng)絡(luò)連接疑難解答
如果網(wǎng)絡(luò)分析器檢測到流量值,但無法識別任何支持的網(wǎng)絡(luò)請求。您將收到以下錯誤消息:”Network Profiling Data Unavailable: There is no information for the network traffic you've selected.”
目前,網(wǎng)絡(luò)分析器只支持HttpURLConnection和OkHttp庫。如果您的應(yīng)用程序使用另一個網(wǎng)絡(luò)連接庫,那么您可能無法在網(wǎng)絡(luò)分析器中查看您的網(wǎng)絡(luò)活動。如果您已經(jīng)收到了這個錯誤消息,但是您的應(yīng)用程序確實(shí)使用HttpURLConnection或OkHttp,請報告錯誤,以便我們可以調(diào)查這個問題。
總結(jié)
以上所述是小編給大家介紹的AndroidStudio3.0最新 Android Profiler分析器(cpu memory network 分析器)的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
關(guān)于如何使用AndroidProfiler中的cpumemorynetwork分析器就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享文章:如何使用AndroidProfiler中的cpumemorynetwork分析器
標(biāo)題網(wǎng)址:http://muchs.cn/article20/iegico.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站制作、網(wǎng)站內(nèi)鏈、電子商務(wù)、定制網(wǎng)站、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)