Android Profile Tools 入門

本次分享會(huì)目的

通過對(duì)增加對(duì) Android Profile Tools 的了解,提高大家工作過程中定位和解決Bug的效率。

注意事項(xiàng)

  • 為了不耽誤大家時(shí)間,語速可能會(huì)快一些
  • 如果講到某個(gè)工具或者技巧,你不太了解,一定要記住它可以解決什么問題安拟。后期如果開發(fā)過程中用到可以再查詢具體使用技巧蛤吓。
  • 如果對(duì)我分享的某個(gè)工具和技巧,很熟練糠赦,你的經(jīng)驗(yàn)我又恰好沒有講到会傲,歡迎打斷我然后分享自己的經(jīng)驗(yàn),這樣可以使本次分享會(huì)的作用最大化拙泽。

學(xué)習(xí) Android 開發(fā)知識(shí)個(gè)人認(rèn)為最重要的一點(diǎn)

盡量用谷歌查bug淌山,查問題原因,查知識(shí)點(diǎn)顾瞻。
使用靠譜的學(xué)習(xí)渠道——谷歌官網(wǎng)泼疑。

Profile Tools

谷歌官方提供的Profile Tools主要有兩類:Android Studio Tools 和 Command Line Tools。

Android Studio Tools

1荷荤、CPU Profiler
2退渗、Memory Profiler
3、Network Profiler
4蕴纳、Battery Historian
5会油、Energy Profiler
6、Profile GPU Rendering
7古毛、Graphics API Debugger (Analyze OpenGL with Tracer is deprecated)
8翻翩、Layout Inspector (Hierarchy Viewer is deprecated)

Command Line Tools

1、systrace
2稻薇、dumpsys
3嫂冻、dmtracedump
……


WX20181115-173603.png

Android Profiler

https://developer.android.com/studio/profile
https://developer.android.com/studio/profile?hl=en

官方簡介:
An app is considered to have poor performance if it responds slowly, shows choppy animations, freezes, crashes, or consumes a lot of power. To avoid these performance problems, use the profiling tools listed on this page to identify where your app is making inefficient use of resources, such as the CPU, memory, graphics, network, and device battery.
如果應(yīng)用程序響應(yīng)緩慢,顯示不穩(wěn)定的動(dòng)畫塞椎,凍結(jié)絮吵,崩潰或消耗大量功率,則應(yīng)用程序被認(rèn)為性能較差忱屑。 要避免這些性能問題蹬敲,請(qǐng)使用此頁面上列出的性能分析工具來確定應(yīng)用程序在何處低效使用資源暇昂,例如CPU,內(nèi)存伴嗡,圖形急波,網(wǎng)絡(luò)和設(shè)備電池。

Profile:扼要介紹瘪校;概述澄暮。
在 “Profile Tools” 這個(gè)場(chǎng)景下感覺翻譯成“配置,全面測(cè)量”比較合適阱扬。
個(gè)人的感覺Profile Tools更偏向宏觀層面的整體測(cè)試泣懊。
實(shí)際舉例:如果耗電量過多,需要先從整體判斷麻惶,有可能耗電多的點(diǎn)是AlarmManager的使用馍刮,還是Wakelock使用太多,通過Profile Tools先進(jìn)行判斷窃蹋,然后再在微觀代碼層面進(jìn)行優(yōu)化卡啰。

使用注意事項(xiàng):

  • While profiling an app, you should [disable Instant Run]。There is a small performance impact when using Instant Run and a slightly larger impact when updating methods. This performance impact could interfere with information provided by performance profiling tools. Additionally, the stub methods generated while using the feature can complicate stack traces.
    在分析應(yīng)用程序時(shí)警没,應(yīng)該禁用“Instant Run”匈辱。 使用Instant Run時(shí)性能影響很小,更新方法時(shí)影響稍大杀迹。 此性能影響可能會(huì)干擾性能分析工具提供的信息亡脸。 此外,使用該功能時(shí)生成的存根方法可能會(huì)使堆棧跟蹤變得復(fù)雜树酪。
  • Android Studio 3.0 采用全新的 **Android Profiler ** 窗口取代 Android Monitor 工具梗掰。 如果使用Android Profiler需要使用比較新的Android Studio。

之前的Android Monitor :
1542164793707.jpg
打開 Android Profiler 窗口步驟:
  1. 點(diǎn)擊 View > Tool Windows > Android Profiler(也可以點(diǎn)擊工具欄中的 Android Profiler )嗅回。

    屏幕快照 2018-11-14 上午11.40.45.png

  2. Android Profiler 窗口頂部及穗,選擇想要分析的設(shè)備 1 和應(yīng)用進(jìn)程 2。
    如果通過 USB 連接了某個(gè)設(shè)備但該設(shè)備未在設(shè)備列表中列出绵载,請(qǐng)確保已啟用 USB 調(diào)試埂陆。

如果使用的是 Android Emulator 或已取得 root 權(quán)限的設(shè)備,Android Profiler 將列出所有正在運(yùn)行的進(jìn)程娃豹,即使這些進(jìn)程可能無法調(diào)試焚虱。 當(dāng)發(fā)布可調(diào)試應(yīng)用時(shí),將會(huì)默認(rèn)選擇此進(jìn)程懂版。


WX20181114-114451.png
啟用高級(jí)分析

要顯示高級(jí)分析數(shù)據(jù)鹃栽,Android Studio 必須在編譯后的應(yīng)用中插入監(jiān)控邏輯。 我個(gè)人的理解就是打開了高級(jí)分析躯畴,可以獲取更加詳細(xì)的監(jiān)控?cái)?shù)據(jù)民鼓。
高級(jí)分析工具提供的功能包括:

1薇芝、Event 時(shí)間線(所有分析器窗口中均有)
2、分配對(duì)象數(shù)量(Memory Profiler 中)
3丰嘉、垃圾回收 Event(Memory Profiler 中)
4夯到、有關(guān)所有傳輸?shù)奈募脑斍椋∟etwork Profiler 中)

要啟用高級(jí)分析,請(qǐng)按以下步驟操作:

1饮亏、選擇 Run > Edit Configurations耍贾。
2、在左側(cè)窗格中選擇的應(yīng)用模塊路幸。
3荐开、點(diǎn)擊 Profiling 標(biāo)簽,然后勾選 Enable advanced profiling简肴。
4晃听、現(xiàn)在重新構(gòu)建并運(yùn)行的應(yīng)用,即可獲取完整的分析功能着帽。 但請(qǐng)注意,高級(jí)分析會(huì)減緩的構(gòu)建速度移层,所以僅當(dāng)想要開始分析應(yīng)用時(shí)才啟用此功能仍翰。

注:對(duì)于原生代碼,不可使用高級(jí)分析功能观话。 如果的應(yīng)用是純?cè)鷳?yīng)用(不含 Java Activity 類)予借,則不可使用高級(jí)分析功能。 如果的應(yīng)用使用了 JNI频蛔,則可使用部分高級(jí)分析功能灵迫,例如 Event 時(shí)間線、GC Event晦溪、Java 分配對(duì)象和基于 Java 的網(wǎng)絡(luò) Activity瀑粥,但不能檢測(cè)基于原生的分配和網(wǎng)絡(luò) Activity。


WX20181114-115109.png

CPU Profiler

CPU Profiler 可幫助實(shí)時(shí)檢查應(yīng)用的 CPU 使用率和線程活動(dòng)三圆,并記錄函數(shù)跟蹤狞换,以便可以優(yōu)化和調(diào)試的應(yīng)用代碼。

要打開 CPU Profiler舟肉,請(qǐng)按以下步驟操作:

  1. 點(diǎn)擊 View > Tool Windows > Android Profiler(也可以點(diǎn)擊工具欄中的 Android Profiler)修噪。
  2. 從 Android Profiler 工具欄中選擇想要分析的設(shè)備和應(yīng)用進(jìn)程。 如果通過 USB 連接了某個(gè)設(shè)備但該設(shè)備未在設(shè)備列表中列出路媚,請(qǐng)確保已啟用 USB 調(diào)試黄琼。
  3. 點(diǎn)擊 CPU 時(shí)間線中的任意位置即可打開 CPU Profiler。
為什么要分析 CPU 使用率

最大限度減少應(yīng)用的 CPU 使用率具有許多優(yōu)勢(shì)整慎,如提供更快更順暢的用戶體驗(yàn)脏款,以及延長設(shè)備電池續(xù)航時(shí)間围苫。 它還可幫助應(yīng)用在各種新舊設(shè)備上保持良好性能。 與應(yīng)用交互時(shí)弛矛,可以使用 CPU Profiler 監(jiān)控 CPU 使用率和線程 Activity够吩。 不過,如需了解應(yīng)用如何執(zhí)行其代碼的詳細(xì)信息丈氓,應(yīng)記錄和檢查函數(shù)跟蹤周循。

對(duì)于應(yīng)用進(jìn)程中的每個(gè)線程,可以查看一段時(shí)間內(nèi)執(zhí)行了哪些函數(shù)万俗,以及在其執(zhí)行期間每個(gè)函數(shù)消耗的 CPU 資源湾笛。 還可以使用函數(shù)跟蹤來識(shí)別調(diào)用方被調(diào)用方。 調(diào)用方指調(diào)用其他函數(shù)的函數(shù)闰歪,而被調(diào)用方是指被其他函數(shù)調(diào)用的函數(shù)嚎研。 您可以使用此信息確定哪些函數(shù)負(fù)責(zé)調(diào)用常常會(huì)消耗大量特定資源的任務(wù),并嘗試優(yōu)化應(yīng)用代碼以避免不必要的工作库倘。

翻譯:查看哪個(gè)函數(shù)消耗時(shí)間太多临扮。

Memory Profiler

Memory Profiler 是 Android Profiler 中的一個(gè)組件,可幫助您識(shí)別導(dǎo)致應(yīng)用卡頓教翩、凍結(jié)甚至崩潰的內(nèi)存泄漏和流失杆勇。 它顯示一個(gè)應(yīng)用內(nèi)存使用量的實(shí)時(shí)圖表,讓您可以捕獲堆轉(zhuǎn)儲(chǔ)饱亿、強(qiáng)制執(zhí)行垃圾回收以及跟蹤內(nèi)存分配蚜退。

打開 Memory Profiler 步驟:
  1. 點(diǎn)擊 View > Tool Windows > Android Profiler(也可以點(diǎn)擊工具欄中的 Android Profiler)。
  2. 從 Android Profiler 工具欄中選擇您想要分析的設(shè)備和應(yīng)用進(jìn)程彪笼。 如果您通過 USB 連接了某個(gè)設(shè)備但該設(shè)備未在設(shè)備列表中列出钻注,請(qǐng)確保您已啟用 USB 調(diào)試
  3. 點(diǎn)擊 **MEMORY **時(shí)間線中的任意位置可打開 Memory Profiler配猫。


    image.png
為什么應(yīng)分析您的應(yīng)用內(nèi)存

Android 提供一個(gè)托管內(nèi)存環(huán)境—當(dāng)它確定您的應(yīng)用不再使用某些對(duì)象時(shí)幅恋,垃圾回收器會(huì)將未使用的內(nèi)存釋放回堆中。 雖然 Android 查找未使用內(nèi)存的方式在不斷改進(jìn)泵肄,但對(duì)于所有 Android 版本佳遣,系統(tǒng)都必須在某個(gè)時(shí)間點(diǎn)短暫地暫停您的代碼。 大多數(shù)情況下凡伊,這些暫停難以察覺零渐。 不過,如果您的應(yīng)用分配內(nèi)存的速度比系統(tǒng)回收內(nèi)存的速度快系忙,則當(dāng)收集器釋放足夠的內(nèi)存以滿足您的分配需要時(shí)诵盼,您的應(yīng)用可能會(huì)延遲。 此延遲可能會(huì)導(dǎo)致您的應(yīng)用跳幀,并使系統(tǒng)明顯變慢风宁。

盡管您的應(yīng)用不會(huì)表現(xiàn)出變慢洁墙,但如果存在內(nèi)存泄漏,則即使應(yīng)用在后臺(tái)運(yùn)行也會(huì)保留該內(nèi)存戒财。 此行為會(huì)強(qiáng)制執(zhí)行不必要的垃圾回收 Event热监,因而拖慢系統(tǒng)的內(nèi)存性能。 最后饮寞,系統(tǒng)被迫終止您的應(yīng)用進(jìn)程以回收內(nèi)存孝扛。 然后,當(dāng)用戶返回您的應(yīng)用時(shí)幽崩,它必須完全重啟苦始。

為幫助防止這些問題,您應(yīng)使用 Memory Profiler 執(zhí)行以下操作:

  • 在時(shí)間線中查找可能會(huì)導(dǎo)致性能問題的不理想的內(nèi)存分配模式慌申。
  • 轉(zhuǎn)儲(chǔ) Java 堆以查看在任何給定時(shí)間哪些對(duì)象耗盡了使用內(nèi)存陌选。 長時(shí)間進(jìn)行多個(gè)堆轉(zhuǎn)儲(chǔ)可幫助識(shí)別內(nèi)存泄漏。
  • 記錄正常用戶交互和極端用戶交互期間的內(nèi)存分配以準(zhǔn)確識(shí)別您的代碼在何處短時(shí)間分配了過多對(duì)象蹄溉,或分配了泄漏的對(duì)象咨油。
memory-profiler-callouts_2x.png

如圖所示,Memory Profiler 的默認(rèn)視圖包括以下各項(xiàng):

  1. 用于強(qiáng)制執(zhí)行垃圾回收 Event 的按鈕柒爵。
  2. 用于捕獲堆轉(zhuǎn)儲(chǔ)的按鈕役电。
  3. 用于記錄內(nèi)存分配情況的按鈕。 此按鈕僅在連接至運(yùn)行 Android 7.1 或更低版本的設(shè)備時(shí)才會(huì)顯示餐弱。
  4. 用于放大/縮小時(shí)間線的按鈕宴霸。
  5. 用于跳轉(zhuǎn)至實(shí)時(shí)內(nèi)存數(shù)據(jù)的按鈕囱晴。
  6. Event 時(shí)間線膏蚓,其顯示 Activity 狀態(tài)、用戶輸入 Event 和屏幕旋轉(zhuǎn) Event畸写。
  7. 內(nèi)存使用量時(shí)間線驮瞧,其包含以下內(nèi)容:
    • 一個(gè)顯示每個(gè)內(nèi)存類別使用多少內(nèi)存的堆疊圖表,如左側(cè)的 y 軸以及頂部的彩色鍵所示枯芬。
    • 虛線表示分配的對(duì)象數(shù)论笔,如右側(cè)的 y 軸所示。
    • 用于表示每個(gè)垃圾回收 Event 的圖標(biāo)千所。

備注:Android 8.0 以上可以看到全部信息狂魔,8.0以下默認(rèn)不是所有數(shù)據(jù)可見,需要啟用高級(jí)分析才能查看以下內(nèi)容:
* Event 時(shí)間線
* 分配的對(duì)象數(shù)
* 垃圾回收 Event

如何計(jì)算內(nèi)存

您在 Memory Profiler頂部看到的數(shù)字取決于您的應(yīng)用根據(jù) Android 系統(tǒng)機(jī)制所提交的所有私有內(nèi)存頁面數(shù)淫痰。 此計(jì)數(shù)不包含與系統(tǒng)或其他應(yīng)用共享的頁面最楷。

memory-profiler-counts_2x.png

內(nèi)存計(jì)數(shù)中的類別如下所示:

  • Java:從 Java 或 Kotlin 代碼分配的對(duì)象內(nèi)存。

  • Native:從 C 或 C++ 代碼分配的對(duì)象內(nèi)存。

    即使您的應(yīng)用中不使用 C++籽孙,您也可能會(huì)看到此處使用的一些原生內(nèi)存烈评,因?yàn)?Android 框架使用原生內(nèi)存代表您處理各種任務(wù),如處理圖像資源和其他圖形時(shí)犯建,即使您編寫的代碼采用 Java 或 Kotlin 語言讲冠。

  • Graphics:圖形緩沖區(qū)隊(duì)列向屏幕顯示像素(包括 GL 表面、GL 紋理等等)所使用的內(nèi)存适瓦。 (請(qǐng)注意竿开,這是與 CPU 共享的內(nèi)存,不是 GPU 專用內(nèi)存犹菇。)

  • Stack: 您的應(yīng)用中的原生堆棧和 Java 堆棧使用的內(nèi)存德迹。 這通常與您的應(yīng)用運(yùn)行多少線程有關(guān)。

  • Code:您的應(yīng)用用于處理代碼和資源(如 dex 字節(jié)碼揭芍、已優(yōu)化或已編譯的 dex 碼胳搞、.so 庫和字體)的內(nèi)存。

  • Other:您的應(yīng)用使用的系統(tǒng)不確定如何分類的內(nèi)存称杨。

  • Allocated:您的應(yīng)用分配的 Java/Kotlin 對(duì)象數(shù)肌毅。 它沒有計(jì)入 C 或 C++ 中分配的對(duì)象。

    當(dāng)連接至運(yùn)行 Android 7.1 及更低版本的設(shè)備時(shí)姑原,此分配僅在 Memory Profiler 連接至您運(yùn)行的應(yīng)用時(shí)才開始計(jì)數(shù)悬而。 因此,您開始分析之前分配的任何對(duì)象都不會(huì)被計(jì)入锭汛。 不過笨奠,Android 8.0 附帶一個(gè)設(shè)備內(nèi)置分析工具,該工具可記錄所有分配唤殴,因此般婆,在 Android 8.0 及更高版本上,此數(shù)字始終表示您的應(yīng)用中待處理的 Java 對(duì)象總數(shù)朵逝。

與以前的 Android Monitor 工具中的內(nèi)存計(jì)數(shù)相比蔚袍,新的 Memory Profiler 以不同的方式記錄您的內(nèi)存,因此配名,您的內(nèi)存使用量現(xiàn)在看上去可能會(huì)更高些啤咽。 Memory Profiler 監(jiān)控的類別更多,這會(huì)增加總的內(nèi)存使用量渠脉,但如果您僅關(guān)心 Java 堆內(nèi)存宇整,則“Java”項(xiàng)的數(shù)字應(yīng)與以前工具中的數(shù)值相似。

然而芋膘,Java 數(shù)字可能與您在 Android Monitor 中看到的數(shù)字并非完全相同鳞青,這是因?yàn)閼?yīng)用的 Java 堆是從 Zygote 啟動(dòng)的涩哟,而新數(shù)字則計(jì)入了為它分配的所有物理內(nèi)存頁面。 因此盼玄,它可以準(zhǔn)確反映您的應(yīng)用實(shí)際使用了多少物理內(nèi)存贴彼。

注:目前,Memory Profiler 還會(huì)顯示應(yīng)用中的一些誤報(bào)的原生內(nèi)存使用量埃儿,而這些內(nèi)存實(shí)際上是分析工具使用的器仗。 對(duì)于大約 100000 個(gè)對(duì)象,最多會(huì)使報(bào)告的內(nèi)存使用量增加 10MB童番。 在這些工具的未來版本中精钮,這些數(shù)字將從您的數(shù)據(jù)中過濾掉。

Network Profiler

為什么應(yīng)分析應(yīng)用的網(wǎng)絡(luò)活動(dòng)

When your app makes a request to the network, the device must use the power-hungry mobile or WiFi radios to send and receive packets. The radios not only use power to transfer data, but also use extra power to turn on and to stay awake.

Using the Network Profiler, you can look for frequent, short spikes of network activity, which mean that your app requires the radios to turn on frequently, or to stay awake for long periods to handle many short requests close together. This pattern indicates that you may be able to optimize your app for improved battery performance by batching network requests, thereby reducing the number of times the radios must turn on to send or receive data. This also allows the radios to switch into low-power mode to save battery in the longer gaps between batched requests.

For more information about techniques to optimize your app's network activity, read Reducing network battery drain.

1剃斧、頻繁網(wǎng)絡(luò)請(qǐng)求不僅僅本身消耗電量轨香,而且手機(jī)因?yàn)闊o法休眠導(dǎo)致消耗更多電量
2、使用Network Profiler可以找出網(wǎng)絡(luò)請(qǐng)求的狀態(tài)幼东,找出其中可以優(yōu)化的部分臂容,達(dá)到優(yōu)化應(yīng)用,改善電池續(xù)航根蟹。

僅支持HttpURLConnection和OkHttp

如果 Network Profiler 檢測(cè)到流量值脓杉,但無法識(shí)別任何受支持的網(wǎng)絡(luò)請(qǐng)求,您會(huì)收到以下錯(cuò)誤消息:

"Network Profiling Data Unavailable: There is no information for the network traffic you've selected."

Network Profiler 目前只支持 HttpURLConnectionOkHttp 網(wǎng)絡(luò)連接庫简逮。 如果您的應(yīng)用使用的是其他網(wǎng)絡(luò)連接庫球散,則可能無法在 Network Profiler 中查看網(wǎng)絡(luò) Activity。

Battery Historian

Batterystats是Android框架中包含的工具散庶,用于收集設(shè)備上的電池?cái)?shù)據(jù)蕉堰。 您可以使用adb將收集的電池?cái)?shù)據(jù)轉(zhuǎn)儲(chǔ)到開發(fā)機(jī)器,并使用Battery Historian創(chuàng)建可以分析的報(bào)告悲龟。 Battery Historian將報(bào)告從Batterystats轉(zhuǎn)換為可在瀏覽器中查看的HTML可視化文件屋讶。

好處有:
1、電池消耗的詳情
2躲舌、識(shí)別應(yīng)用中可能會(huì)延遲甚至刪除的任務(wù)丑婿,以延長電池壽命性雄。

從Batterystats提取數(shù)據(jù)的步驟:
1没卸、將移動(dòng)設(shè)備連接到計(jì)算機(jī)。
2秒旋、通過終端窗口约计,關(guān)閉正在運(yùn)行的adb服務(wù)
adb kill-server
3、重新啟動(dòng)adb并檢查已連接的設(shè)備迁筛。
adb devices
4煤蚌、重置Batterystats數(shù)據(jù)采集
adb shell dumpsys batterystats --reset

設(shè)備會(huì)始終在后臺(tái)收集batterystats和其他調(diào)試信息。重置會(huì)刪除舊的Batterystats收集數(shù)據(jù)。如果不重置尉桩,輸出的文件將會(huì)十分巨大筒占。

5、斷開設(shè)備與計(jì)算機(jī)的連接蜘犁,以便設(shè)備僅使用電池的電量翰苫。
6、執(zhí)行需要測(cè)試的操作:使用目標(biāo)APP等
7这橙、重新連接手機(jī)奏窑。
8、確保手機(jī)已經(jīng)連接
adb devices
9屈扎、轉(zhuǎn)儲(chǔ)所有電池?cái)?shù)據(jù)埃唯。可能需要一些時(shí)間:
adb shell dumpsys batterystats [path/]batterystats.txt
使用可選路徑參數(shù)在指定的目錄中創(chuàng)建batterystats.txt文件鹰晨。如果未指定路徑墨叛,則會(huì)在主目錄中創(chuàng)建該文件。
10模蜡、從原始數(shù)據(jù)創(chuàng)建報(bào)告:
Android 7.0 或者更高版本:
adb bugreport > [path/]bugreport.zip
Android 6.0 或者更低版本:
adb bugreport > [path/]bugreport.txt

Bugreport可能需要幾分鐘才能完成巍实。在完成之前,請(qǐng)勿斷開設(shè)備或取消該過程哩牍。

11棚潦、啟動(dòng)Battery Historian 并登陸到相應(yīng)界面:


Bugreport

12、提交Bugreport文件膝昆,并點(diǎn)擊Submit丸边。完成數(shù)據(jù)分析。

WX20181115-162719.png

GPU Rendering

Profile GPU Rendering 工具以滾動(dòng)直方圖的形式直觀地顯示渲染界面窗口幀所花費(fèi)的時(shí)間(以每幀 16 毫秒的速度作為對(duì)比基準(zhǔn))荚孵。

在性能較低的 GPU 上妹窖,可用的填充率(GPU 填充幀緩沖區(qū)的速度)可能很低。 隨著繪制幀所需的像素?cái)?shù)增加收叶,GPU 可能需要花較長時(shí)間來處理新命令骄呼,并要求系統(tǒng)的其余任務(wù)等待,直到系統(tǒng)可以跟上需求判没。 此分析工具可幫助您確定 GPU 何時(shí)因嘗試?yán)L制像素而負(fù)擔(dān)過重蜓萄,或何時(shí)因大量的過度繪制而被拖累。

注:此分析工具不適用于使用 NDK 的應(yīng)用澄峰。 推薦使用 GPU 制造商提供的分析工具嫉沽。

啟用分析器

開始前,請(qǐng)確保您使用的是運(yùn)行 Android 4.1(API 級(jí)別 16)或更高版本的設(shè)備俏竞,并啟用開發(fā)者選項(xiàng)绸硕。 要在使用應(yīng)用時(shí)開始分析設(shè)備 GPU 渲染堂竟,請(qǐng)執(zhí)行以下操作:

  1. 在您的設(shè)備上,轉(zhuǎn)到 Settings 并點(diǎn)按 Developer Options玻佩。
  2. Monitoring 部分出嘹,選擇 Profile GPU Rendering
  3. 在 Profile GPU Rendering 對(duì)話框中咬崔,選擇 On screen as bars 以在設(shè)備屏幕上疊加圖表疚漆。
  4. 打開您要分析的應(yīng)用。
QQ20181115-0.jpg
注意事項(xiàng):

1刁赦、對(duì)于每個(gè)可見應(yīng)用娶聘,此工具將顯示一個(gè)圖表。
2甚脉、沿水平軸的每個(gè)豎條都代表一個(gè)幀丸升,每個(gè)豎條的高度表示渲染該幀所花的時(shí)間(單位:毫秒)。
3牺氨、水平綠線表示 16 毫秒狡耻。 要實(shí)現(xiàn)每秒 60 幀,代表每個(gè)幀的豎條需要保持在此線以下猴凹。 當(dāng)豎條超出此線時(shí)夷狰,可能會(huì)使動(dòng)畫出現(xiàn)暫停。
此工具通過加寬對(duì)應(yīng)的豎條并降低透明度來突出顯示超出 16 毫秒閾值的幀郊霎。
4沼头、每個(gè)豎條都有與渲染管道中某個(gè)階段對(duì)應(yīng)的彩色區(qū)段。 區(qū)段數(shù)因設(shè)備的 API 級(jí)別而異书劝。

下表介紹了使用運(yùn)行 Android 6.0 及更高版本的設(shè)備時(shí)分析器輸出中某個(gè)豎條的每個(gè)區(qū)段进倍。


![WX20181115-151406.png](https://upload-images.jianshu.io/upload_images/11156469-2551c3bc943512d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4.0(API 級(jí)別 14)和 5.0(API 級(jí)別 21)之間的 Android 版本具有藍(lán)色、紫色购对、紅色和橙色區(qū)段猾昆。 低于 4.0 的 Android 版本只有藍(lán)色、紅色和橙色區(qū)段骡苞。 下表顯示的是 Android 4.0 和 5.0 中的豎條區(qū)段垂蜗。


WX20181115-151406.png

Energy Profiler

The Energy Profiler helps you to find where your app uses more energy than necessary.

The Energy Profiler monitors the use of the CPU, network radio, and GPS sensor, and it displays a visualization of how much energy each of these components uses. The Energy Profiler also shows you occurrences of system events (wake locks, alarms, jobs, and location requests) that can affect energy consumption.

The Energy Profiler does not directly measure energy consumption. Rather, it uses a model that estimates the energy consumption for each resource on the device.

1、Energy Profiler可幫助您找到應(yīng)用程序使用的能量超出必要的程度解幽。

2贴见、Energy Profiler監(jiān)控CPU,network radio和GPS傳感器的使用情況亚铁,并顯示每個(gè)組件使用多少能量的可視化蝇刀。 Energy Profiler還會(huì)顯示可能影響能耗的系統(tǒng)事件(wake locks, alarms, jobs和位置請(qǐng)求)螟加。

3徘溢、Energy Profiler不直接測(cè)量能耗吞琐。 相反,它使用一種模型來估算設(shè)備上每種資源的能耗然爆。

WakeLock:A wake lock is a mechanism to indicate that your application needs to have the device stay on.
喚醒鎖是一種機(jī)制站粟,用于指示您的應(yīng)用程序需要讓設(shè)備保持打開狀態(tài)。
AlarmManager:This class provides access to the system alarm services.
系統(tǒng)時(shí)鐘曾雕,通過廣播方式發(fā)送提醒奴烙。
JobScheduler :This is an API for scheduling various types of jobs against the framework that will be executed in your application's own process.
工作調(diào)度器:通過系統(tǒng)后臺(tái)服務(wù),執(zhí)行自己的任務(wù)剖张。相比AlarmManager更加省電切诀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市搔弄,隨后出現(xiàn)的幾起案子幅虑,更是在濱河造成了極大的恐慌,老刑警劉巖顾犹,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倒庵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炫刷,警方通過查閱死者的電腦和手機(jī)擎宝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浑玛,“玉大人绍申,你說我怎么就攤上這事」苏茫” “怎么了失晴?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拘央。 經(jīng)常有香客問我涂屁,道長,這世上最難降的妖魔是什么灰伟? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任拆又,我火速辦了婚禮,結(jié)果婚禮上栏账,老公的妹妹穿的比我還像新娘帖族。我一直安慰自己,他們只是感情好挡爵,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布竖般。 她就那樣靜靜地躺著,像睡著了一般茶鹃。 火紅的嫁衣襯著肌膚如雪涣雕。 梳的紋絲不亂的頭發(fā)上艰亮,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音挣郭,去河邊找鬼迄埃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兑障,可吹牛的內(nèi)容都是我干的侄非。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼流译,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼逞怨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起福澡,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤骇钦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后竞漾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眯搭,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年业岁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳞仙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡笔时,死狀恐怖棍好,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情允耿,我是刑警寧澤借笙,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布簿废,位于F島的核電站薄翅,受9級(jí)特大地震影響顾腊,放射性物質(zhì)發(fā)生泄漏熙含。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一盆昙、第九天 我趴在偏房一處隱蔽的房頂上張望诊县。 院中可真熱鬧缎浇,春花似錦骡楼、人聲如沸熔号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽引镊。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弟头,已是汗流浹背吩抓。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亮瓷,地道東北人琴拧。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓降瞳,卻偏偏與公主長得像嘱支,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挣饥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容