Android性能優化——內存優化

內存分析

由於有些圖片截取的區域較大,可能看不清楚上面的字。可以放大查看,Chrome瀏覽器使用鼠標滾輪+ctrl。

原因

爲什麼要進行內存分析?

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

如果程序出現大量的內存分配和釋放,就意味着產生了頻繁的GC。當GC線程運行時,其他線程會停止工作(包括UI線程),直到GC完成。所以頻繁的GC,必然會導致UI線程的卡頓。特別是性能比較差的手機上,尤爲明顯。 這裏寫圖片描述

原因二:內存泄漏

如果程序出現大量的內存分配,這是而GC無法回收(一般都是因爲有強引用在引用該對象,也就是所謂的內存泄漏),那就會導致程序最終因爲內存枯竭而崩潰。在程序上的表現,就是拋出OutOfMemory異常。
當出現上面兩種情況的時候就需要進行內存分析了

分析手段

通過AndroidStudio自帶的Monitors工具集中的Memory工具來分析。 這裏寫圖片描述

使用Memory工具分析頻繁GC

頻繁GC在Memory監視工具中的表現是出現了大量鋸齒狀內存波動。如果沒有出現這種類型的波動,就不是頻繁的GC了 這裏寫圖片描述

1. 選擇要監視的線程

2. 獲取內存分配監視報告

這裏寫圖片描述
1. 手動觸發GC 這裏寫圖片描述
- 點擊監視按鈕這裏寫圖片描述,開始監視,按鈕狀態變爲這裏寫圖片描述,再次點擊後結束監視

這裏寫圖片描述

  • 結束監視後會得到結果文件

    這裏寫圖片描述

3. 分析監視結果文件

分析過程已經標註在圖片上了,也就是圖片上的紅字

排序
這裏寫圖片描述

展開
這裏寫圖片描述

跳轉到相應源碼
這裏寫圖片描述

找到相應代碼,並解決
這裏寫圖片描述

解決

通過分析可以出現內存波動是由於,頻繁的創建臨時Bitmap對象導致。在上面的業務中最終使用ColorDrawable進行代替。

總結

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章