解決常見的成效問題

如要提供流暢、穩定且省電的應用程式體驗,您必須找出並解決常見的效能瓶頸,包括穩定性、UI 算繪、記憶體用量、背景工作、啟動延遲和建構最佳化。

本節的指南會說明各類型問題的基礎 Android 平台行為,並逐步說明如何使用 Android Studio 分析器、Perfetto、Logcat 和 ApplicationExitInfo 等工具診斷、分析及修正問題。

穩定性

  • ANR診斷並修正因 UI 執行緒遭封鎖、主執行緒 I/O、鎖定爭用或廣播接收器速度緩慢而導致的應用程式無回應 (ANR) 錯誤。
  • 當機讀取堆疊追蹤、檢查 Logcat 輸出內容,以及避免未處理的例外狀況和原生訊號。

轉譯和啟動

  • 轉譯速度緩慢找出並修正因耗用大量資源的版面配置、繫結傳遞或主執行緒停滯而導致的捨棄或凍結 UI 影格 (>16ms>700ms)。
  • 緩慢工作階段 (僅限遊戲) 使用 SurfaceFlinger 測量影格放送速度,並使用 Android Frame Pacing (Swappy)、Vulkan 和 Android 動態效能架構 (ADPF) 最佳化遊戲影格速率。
  • 應用程式啟動時間瞭解冷啟動、暖啟動和熱啟動的內部運作方式,測量初始顯示時間 (TTID) 和完整顯示時間 (TTFD),並最佳化啟動作業。

記憶體管理

  • 記憶體不足終止工具 (LMK)瞭解 Android 記憶體不足終止工具 Daemon (lmkd) 如何透過 oom_adj_score 排定程序優先順序,以及如何在 Android Studio、Unity 和 Unreal Engine 中分析記憶體用量。
  • 記憶體用量 (匿名 RSS + 交換空間) 測量並減少應用程式在前景、服務和背景狀態下的匿名常駐集大小 (RSS) 和交換空間記憶體用量。
  • 點陣圖記憶體用量 診斷過大或洩漏的點陣圖分配情形,並在 UI 元件移至背景時釋放圖形緩衝區。

電池與背景作業

  • Wake Lock 過多避免長時間保留部分 Wake Lock,並將背景工作遷移至 WorkManagerJobScheduler
  • 部分 Wake Lock 停滯請確保所有執行和錯誤路徑中,取得的部分 Wake Lock 都已正確釋出。
  • 喚醒次數過多減少精確鬧鐘喚醒次數,並批次處理或延後排定的背景工作。
  • 背景掃描 Wi-Fi 次數過多 盡量減少背景掃描 Wi-Fi 頻率,並使用被動或批次位置和連線能力 API。
  • 背景網路用量過大 使用WorkManager 限制,批次處理並延後背景行動網路傳輸作業。
  • 電池用量過高 分析 CPU、感應器和無線電活動,診斷行動裝置和 Wear OS 裝置的電池耗電量過高問題。

權限和建構最佳化

  • 拒絕授予權限在適當情境下要求執行階段權限,並向使用者清楚說明權限要求原因。
  • DEX 程式碼最佳化 設定 R8 縮減、模糊化和最佳化規則,縮減 DEX 大小並提升執行階段效能。