android效能最佳化實戰前篇

來源:互聯網
上載者:User

標籤:

本文地址:http://blog.csdn.net/iamws/article/details/51629160


前言:

        最近因為某項目cpu,記憶體的使用率實在讓人不敢恭維;手機發燙,電量下降已經讓使用者無法忍受;頻繁快速迭代發版導致各種效能問題突出;由於之前產品不考慮低端手機情況,低端手機直接跑到崩潰,直接體現的是DAU的急速下降;最終在競品的對比資料下,開始重視這塊事情了,也給了我們半個月時間去最佳化效能。


目標:

       效能達到並且低於競品的消耗值,並且能讓低配使用者也能玩起來。


這就是這篇文章的來源了,算作這一階段最佳化後的個人總結吧,切入正題:我們都知道在短時間大改動的產品迭代期,效能問題會比較突出,特別是敏捷新功能開發,由於每個開發人員都有自己的思維,最終如果在沒有好的架構約束下,問題就會越來越多,滾雪球般,體現最明顯的就是記憶體流失,布局層次過深,measure計算過多,動畫繪製問題,io,自訂控制項的draw裡面對象建立,線程濫用,handler裡面丟了個外部對象不清除,內部類與匿名類問題等,所以實戰的第一步就是定位問題,而定位問題,最好的就是使用各種成熟工具:


首先介紹一下常用工具:

1、android studio/intellij裡面的記憶體,cpu監控器

2、DDMS裡面那一排的功能

3、MAT

4、手機的開發人員模式下的各種選項

5、fiddle/wireshark等一些抓包的代理工具

6、其他協助工具輔助等

相信這些工具網上一搜一大把教程,不過這裡我還是囉嗦下,畢竟用好工具是最重要的一步(因為解決大多效能問題就要靠技術積累去瞭解並改動代碼實現了):

ps:下面只是簡單介紹各個工具的功能,不會涉及過多工具的使用方法,如果需要查看使用方法的話麻煩大家google一下,如果對這些工具都比較熟悉的就可以不用看下面了,等接下來後續的執行個體分析和總結吧(┬_┬)


第一個,直接用IDE的cpu,記憶體監視器,也就是的這些monitor

啟動方法:




通過運行app的過程中觀察整個圖表變化,如果有效能問題的可以很明顯的看到線的走勢圖會出現異常,這個是最簡單的查看器。

可用於查看:GC過程,記憶體配置,cpu使用real time等

  • Show a graph of available and allocated Java memory over time.
  • Show garbage collection (GC) events over time.
  • Initiate garbage collection events.
  • Quickly test whether app slowness might be related to excessive garbage collection events.
  • Quickly test whether app crashes may be related to running out of memory

具體使用方法可見官方文檔:

https://developer.android.com/studio/profile/am-memory.html

https://developer.android.com/studio/profile/am-cpu.html


第二個:DDMS(重點)

啟動方法:




這個裡面功能很全,debug,抓布局,截屏,線程,抓效能資料,GPU樣樣都有,基本也是最佳化過程中用的最多的工具了

1、debug開關

2、在13(heap viewer)中顯示當前記憶體狀況

3、抓取當前時刻進程中記憶體資料,是dump下來hprof檔案,這個檔案就是要結合後面重點的MAT工具用來分析記憶體用的(重點)

4、記憶體回收,立即GC

5、在12(thread viewer)當中顯示當前進程裡面所有線程的運行狀態(重點)

6、可以抓取一段時間內整體cpu使用狀況(Traceview),用來分析方法在cpu的消耗情況(重點)

7、停止

8、截屏

9、擷取當前手機布局整體的緯度,用來分析UI嵌套繪製樹(重點)

10、這個工具需要積累一定的系統知識才能用的好,特別是要知道那些方法是處理介面UI,那些是處理資源調度什麼的,因為這是對系統整體的綜合追蹤,開啟過程中可以自己過濾一些分析對象,最終會產生一個網頁檔案,通過瀏覽器可以看到裡面的圖表結構,我主要是用這個分析webview的效能和vsync下UI卡頓原因的,這個vsync是什麼後面會講


11、分析GPU的繪製(硬解碼好東東,分擔cpu的)

12、線程展示框

13、記憶體展示框

14、對象分配展示框

15、網路使用框

16、檔案瀏覽框

17、類比機avd控制器

18、整體系統狀態餅狀圖(CPU,記憶體,frame)


第三個MAT工具:

表徵圖長的像eclipse的傢伙,以前用eclipse可以直接從裡面開啟,好像這個工具就是eclipse這邊搞的(錯了勿噴哈)

工具官方地址:http://www.eclipse.org/mat/

這個工具作用很重要,分析記憶體流失,還有整體記憶體狀態就靠它了

開啟上面我們用DDMS第三個功能dump下來的hprof檔案後如樣子:(原諒我從官網偷的圖,注意ddms抓的hprof檔案要用到android sdk的tools下面的hprof-conv.exe轉換一下才行)



從這個工具裡面我們可以看到當時應用中有哪些對象,而且用這個工具可以跟蹤整個對象在GC root下整體引用過程,這塊知識需要用到java的GC原理,用這個工具主要是用來找記憶體流失的,也就是通過這個工具,我可以知道應該要被回收的對象,為什麼沒有被回收,它的引用樹是什麼樣的,這樣就能去代碼中定位問題所在了,還有可以用這個工具看看對象記憶體的使用方式,分析哪些對象可以用對象池,哪些對象new的數目特別多等




第四個:安卓手機裡面的開發人員模式



這個工具可以直接很直觀的看過度繪製,cpu記憶體使用量情況,各個布局的邊界,surface更新閃爍,不保留活動等,主要用來直觀的看出APP的健全狀態,還有home回首頁後的activity調試,重點主要還是分析過度繪製

下面給出開啟了過度繪製驗證時候的介面顏色分析圖吧:

ps:無色還有可能是用了surfaceview這種另外的window層




第五個:抓包工具:

這個主要是針對webview,還有各種網路通訊的時候使用,用來分析包的情況還有資料請求情況,可以發現很多請求是否必要或者能夠減少請求頻率,減少回複大小,達到減少解析或者壓縮的cpu損失

fiddle工具左側為請求區,右側為協議內部內容,這個主要是對http和https的




第六個:其他工具

先說一個:電量統計battery-historian

地址:https://github.com/google/battery-historian

這個工具依賴萬能的adb,其他工具實際上也就是都利用adb的,只不過更視圖可視化了,如果adb用的溜,那確實可以直接在命令列中就可以看很多資料了

這裡就舉例說下效能調試中對電量使用擷取的方法吧:

先初始化

adb shell dumpsys batterystats --enable full-wake-historyshell dumpsys batterystats --reset

然後運行app一段時間後利用bugreport日誌可以匯出

adb bugreport > bugreport.txt

開啟txt可以找到這段話


這個就是可以看出電量使用方式了,但是既然說了上面有個工具,那肯定要用上啦,


使用上面的工具轉換成html可以更方便查看(ps:上面的工具是python的,需要配置下python環境)

python historian.py -a bugreport.txt > batteryhistory.html
原諒我盜用了作者的圖,裡面可以統計很多資訊:


具體要分析什麼,大家可以看github上作者對每個功能的詳細介紹吧。


好了,效能分析前篇準備工作就是熟悉工具,以及會使用工具抓分析資料,接下來就是一些理論和實戰的東西了,工具分析就到這了,如果大家需要我出一套工具的詳細使用方法那就多留言吧,我爭取可以抽時間出來針對每一個工具都做個詳細分析~


author:[email protected]

轉載必須註明出處:本文地址:http://blog.csdn.net/iamws/article/details/51629160







android效能最佳化實戰前篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.