點陣圖通常是應用程式中耗用最多記憶體的物件。解碼和縮放作業經常位於影格算繪的關鍵路徑上。最佳化點陣圖記憶體用量可減少卡頓、ANR 和 OOM 相關的程序終止情形,大幅提升 UI 回應速度、電池續航力及整體穩定性。
找出點陣圖記憶體用量偏高的情形
Android Vitals 會彙整 Android 裝置的資料,提供應用程式點陣圖記憶體用量的指標。根據預設,系統會匯總 28 天的每日資料摘要來計算指標。這項資料有助於找出不同裝置類型和版本在記憶體效率方面的趨勢和潛在回歸。
Android Vitals 會根據下列程序狀態,提供應用程式的點陣圖記憶體用量:
- 前景:應用程式的程序可見。相較於其他程序狀態,前景的 P99 預期會明顯偏高,但如果 P99/P50 比率顯著偏高 (例如高於 3.5 倍),開發人員應進行調查,因為這通常表示有點陣圖記憶體流失問題。您可以查看一般用量 (P50) 和離群值用量 (P99) 之間的差異,判斷是否發生這種情況。一般資產膨脹會使所有百分位數的記憶體用量一致增加,但記憶體洩漏會隨著時間累積,大幅扭曲尾端資料 (P99)。確保應用程式轉換為其他狀態後,前景點陣圖分配不會不必要地持續存在。
- 使用者可察覺的服務:應用程式的程序正在可察覺狀態下執行。包括前景服務、加速工作和使用者啟動的資料移轉工作。應用程式在轉換至這些狀態時,不得保留大量前景點陣圖分配。因為這些服務是為長時間執行的工作而設計,保留大型資產會降低整體使用者體驗,並強制記憶體不足終止工具 (LMKD) 終止低優先順序程序,以回收記憶體。
- 背景:應用程式正在執行背景服務,或最近剛進入背景,但尚未快取。由於這個程序狀態的重要性低於前景或可感知程序,應用程式應在此明確釋出大型點陣圖資產,以減輕記憶體壓力。
- 已快取:應用程式處於快取狀態。這個狀態對系統記憶體壓力 (例如 LMK) 非常敏感。應用程式必須主動減少此狀態下的點陣圖記憶體用量,以免遭作業系統清除。
導致點陣圖記憶體用量偏高的原因
計算結果也可能包含從未使用過的虛擬記憶體。如果發現點陣圖記憶體用量異常偏高,請確認您未分配未使用的記憶體。