擷取記憶體快照資料 (檢視畫面)

實作 Jetpack Compose

本頁面提供專為以 View 為基礎的版面配置設計的資訊,說明如何找出及觸發記憶體流失。如要瞭解如何擷取及分析記憶體快照資料,請參閱「擷取記憶體快照資料」。

找出記憶體流失問題

如要快速篩選出可能與記憶體流失相關聯的類別,請開啟類別下拉式選單,然後選取「顯示活動/片段流失」。Android Studio 會顯示可能代表應用程式中的 ActivityFragment 執行個體導致記憶體流失的類別。這項篩選條件會顯示的資料類型包括:

  • 已遭刪除但仍受參照的 Activity 執行個體。
  • 不含有效 FragmentManager 但仍受參照的 Fragment 執行個體。

請注意,在下列情況下,這項篩選條件可能會產生誤判結果:

  • Fragment 已建立但尚未使用。
  • Fragment 已快取,但不屬於 FragmentTransaction

如要更手動地尋找記憶體流失,請瀏覽類別和執行個體清單,找出「保留大小」較大的物件。請注意下列任一原因所導致的記憶體流失情形:

  • 長時間參照 ActivityContextViewDrawable,以及可能會保留 ActivityContext 容器參照的物件。
  • 可保留 Activity 執行個體的非靜態內部類別 (例如 Runnable)。
  • 保留物件超過必要時間的快取。

發現潛在的記憶體洩漏問題時,請使用「Instance Details」(執行個體詳細資料) 中的「Fields」(欄位) 和「References」(參照) 分頁標籤,跳至感興趣的執行個體或原始碼行。

觸發記憶體流失以進行測試

如要在應用程式中引發記憶體流失以進行測試,可以透過下列任一方式觸發流失:

  • 在不同的活動狀態下,將裝置從直向轉為橫向再轉回直向,依此多次反覆執行。旋轉裝置經常會導致應用程式的 ActivityContextView 物件流失,這是因為系統會重新建立 Activity,而且如果應用程式在其他位置保留其中任一物件的參照,系統將無法執行垃圾收集。
  • 在不同的活動狀態下,在您的應用程式與其他應用程式之間切換。舉例來說,你可以前往主畫面,然後返回應用程式。