天天看點

Android性能優化——記憶體優化記憶體分析

記憶體分析

由于有些圖檔截取的區域較大,可能看不清楚上面的字。可以放大檢視,Chrome浏覽器使用滑鼠滾輪+ctrl。

原因

為什麼要進行記憶體分析?

原因一:頻繁GC導緻UI線程卡頓

如果程式出現大量的記憶體配置設定和釋放,就意味着産生了頻繁的GC。當GC線程運作時,其他線程會停止工作(包括UI線程),直到GC完成。是以頻繁的GC,必然會導緻UI線程的卡頓。特别是性能比較差的手機上,尤為明顯。

Android性能優化——記憶體優化記憶體分析

原因二:記憶體洩漏

如果程式出現大量的記憶體配置設定,這是而GC無法回收(一般都是因為有強引用在引用該對象,也就是所謂的記憶體洩漏),那就會導緻程式最終因為記憶體枯竭而崩潰。在程式上的表現,就是抛出OutOfMemory異常。

當出現上面兩種情況的時候就需要進行記憶體分析了

分析手段

通過AndroidStudio自帶的Monitors工具集中的Memory工具來分析。

Android性能優化——記憶體優化記憶體分析

使用Memory工具分析頻繁GC

頻繁GC在Memory監視工具中的表現是出現了大量鋸齒狀記憶體波動。如果沒有出現這種類型的波動,就不是頻繁的GC了

Android性能優化——記憶體優化記憶體分析

1. 選擇要監視的線程

2. 擷取記憶體配置設定監視報告

Android性能優化——記憶體優化記憶體分析

1. 手動觸發GC

Android性能優化——記憶體優化記憶體分析

- 點選監視按鈕

Android性能優化——記憶體優化記憶體分析

,開始監視,按鈕狀态變為

Android性能優化——記憶體優化記憶體分析

,再次點選後結束監視

Android性能優化——記憶體優化記憶體分析
  • 結束監視後會得到結果檔案
    Android性能優化——記憶體優化記憶體分析

3. 分析監視結果檔案

分析過程已經标注在圖檔上了,也就是圖檔上的紅字

排序

Android性能優化——記憶體優化記憶體分析

展開

Android性能優化——記憶體優化記憶體分析

跳轉到相應源碼

Android性能優化——記憶體優化記憶體分析

找到相應代碼,并解決

Android性能優化——記憶體優化記憶體分析

解決

通過分析可以出現記憶體波動是由于,頻繁的建立臨時Bitmap對象導緻。在上面的業務中最終使用ColorDrawable進行代替。

總結

上面通過展示一次解決記憶體優化的過程,來展示解決記憶體問題的一種思路。希望能給大家提供一些借鑒。