Android 記憶體不足終止工具 (LMK) Daemon 會監控執行中 Android 系統的記憶體狀態,並終止最不重要的程序,因應記憶體壓力過高的情況。Android Vitals 會在 Google Play 管理中心追蹤並回報使用者感知 LMK 終止事件,協助您找出影響使用者的記憶體壓力問題。
Android Vitals 的 LMK 指標
Android Vitals 可協助您監控及改善應用程式的 LMK 發生率。Android Vitals 只會評估一種 LMK 事件發生率:使用者感知 LMK 事件發生率。
這項指標反映了每日活躍使用者中,至少遇到一次使用者感知 LMK 事件的人數百分比。使用者感知 LMK 事件是指使用者可能注意到的記憶體耗盡情形,例如,應用程式在顯示活動或做為前景服務執行時發生的 LMK。這類終止作業會導致程序立即非正常退出。對使用者來說,這就像是應用程式當機,通常會略過標準生命週期狀態儲存機制,導致使用者進度遺失。
Android Vitals 著重於這些程序終止,因為這些程序可做為記憶體管理不當問題的高擬真度 Proxy。如果 LMK 比率超過 1%,表示必須立即採取行動。不過,LMK 率較低不一定代表應用程式的記憶體用量正常。這個比率較低,可能代表 LMK Daemon 經常終止背景程序,導致「暖啟動」效能和多工流暢度降低。
您可以在 Android Vitals 的「穩定性」部分查看這項指標:

與 ANR 和當機等類似的核心指標一樣,您可以篩選指標、與同類應用程式比較指標,或長期監控指標變化 (最多 3 年)。現有應用程式的資料自 2025 年 1 月 28 日起提供。

記憶體不足終止工具 Daemon 的運作方式
Android 平台執行時會將未使用的記憶體視為浪費的記憶體,Android 會持續設法用掉所有可用的記憶體。舉例來說,系統會在應用程式關閉後將其留在記憶體內,'方便使用者快速切換回這些應用程式。因此,Android 裝置在執行時,通常不會發生大量記憶體未用到的情況 (請參閱「程序之間的記憶體配置」)。
當可用記憶體不足時,記憶體不足終止工具 (LMK) Daemon 會使用稱做 oom_adj_score 的「記憶體不足」分數,為執行中的程序排出優先順序,藉此決定要終止哪些程序。系統會優先終止分數較高的程序。背景應用程式會最先終止,系統程序則最後終止。下表由高到低列出 LMK 的分數類別。屬於第一列最高分類別的項目會最先遭到終止:
記憶體分析工具
下列工具可協助您找出及診斷記憶體問題:
- 瞭解應用程式配置記憶體的變化趨勢。您可以查看即時圖表,瞭解應用程式目前的記憶體用量、已配置的 Java 物件數量,以及進行垃圾收集的時間點。
- 在應用程式執行期間,啟動垃圾收集事件並提供 Java 堆積的數據匯報。
- 記錄應用程式的記憶體配置、檢查所有配置的物件,以及查看每個配置的堆疊追蹤。
如果遊戲是在原生引擎上執行,請使用 HWAddress Sanitizer 對原生記憶體配置進行偵錯。
Android Studio 記憶體分析器
Android Studio 提供記憶體分析器做為 Android 分析器的元件,可協助您找出可能導致延遲、沒有回應、甚至應用程式異常終止的記憶體流失和記憶體抖動情形。分析器會顯示應用程式記憶體用量的即時圖表,並可讓您擷取記憶體快照資料、強制執行垃圾收集,以及追蹤記憶體配置。
Unity 記憶體分析工具
如果您使用 Unity 引擎建構應用程式,可以按照 Unity 記憶體分析指南操作。Unity 提供兩項工具,可用於分析 Unity 應用程式的記憶體用量。
首先是記憶體分析器模組,這是一種內建分析器,可提供應用程式使用記憶體位置的基本資訊。
第二個工具是記憶體分析器套件,這是可新增至專案的 Unity 套件。這個套件會在 Unity 編輯器中新增額外的記憶體分析器視窗。記憶體分析器可讓您更詳細地分析應用程式中的記憶體用量。您可以儲存及比較快照,找出記憶體流失問題,或查看記憶體版面配置,找出記憶體片段問題。
如需 Android 專用的 Unity 工作流程,請參閱「使用 Unity 工具檢查記憶體用量」、「在 Unity 中最佳化記憶體用量」和「對 Unity 遊戲的 LMK 進行偵錯」。
Unreal Memory Insights
Unreal Engine 建構的應用程式可以使用 Unreal Memory Insights,查看記憶體配置和取消配置的詳細資訊,包括與記憶體區塊相關聯的低階記憶體 (LLM) 標記和呼叫堆疊。
Memory Insights 查詢系統可找出任何時間點的即時分配、識別記憶體用量變化、找出記憶體流失,以及區分短期和長期分配。
從 UE 5.4 開始,Memory Insights 支援 Android 專案的呼叫堆疊記憶體追蹤。
如要瞭解 Android 專用的 Unreal 工作流程,請參閱「使用 Unreal 檢查記憶體用量」和「在 Unreal 中最佳化記憶體用量」。
記憶體不足深入分析
Android 提供回呼和 API,可讓您減少遊戲的記憶體用量,並判斷先前遊戲執行作業終止的原因。
回呼
請勿註冊已淘汰的 trim 回呼。Android 不提供 API,用於在系統回收記憶體前偵測原生記憶體壓力事件,且精細的執行記憶體修剪回呼 (TRIM_MEMORY_RUNNING_*) 無法有效防止記憶體不足終止。因此,Android 淘汰了 TRIM_MEMORY_UI_HIDDEN 和 TRIM_MEMORY_BACKGROUND 以外的所有修剪層級。當遊戲移至背景時,請使用這些剩餘的回呼,或引擎生命週期對等項目 (例如 Unity 的 OnApplicationPause 和 Unreal 的 ApplicationWillEnterBackgroundDelegate),釋出 UI 和輔助資源。如需導入詳情,請參閱「減少遊戲記憶體用量」。
遊戲終止
Android 會嘗試使用所有可用記憶體快取應用程式和遊戲,確保能快速載入 (改善使用者體驗),但當記憶體不足時,系統會終止最耗用記憶體的應用程式和遊戲,釋出記憶體供裝置正常運作。
以下資訊、深入分析和最佳做法,可協助您改善遊戲記憶體用量:
- 使用
ApplicationExitInfo:這個 API 會傳回 Android 系統終止前一個遊戲執行的原因。使用ApplicationExitInfo檢查記憶體不足 (REASON_LOW_MEMORY) 或記憶體限制器終止 (REASON_MEMORY_LIMITER),做為先前程序結束的原因 (請參閱「遊戲的 ApplicationExitInfo」)。檢查遊戲是否因記憶體壓力而終止,以便最佳化遊戲,減少在該裝置上使用的記憶體。 - 查看實體 RAM 總量:為避免遊戲在前台執行時遭到終止,並配合裝置效能,請查看每部裝置的實體 RAM 總量,以便根據該值調整遊戲記憶體用量。如果目標是避免應用程式在移至背景後不久遭到終止 (讓玩家可以多工處理),請使用修剪回呼 (特別是
TRIM_MEMORY_UI_HIDDEN) 減少遊戲記憶體用量。