簡體   English   中英

如何處理Android內存管理和onTrimMemory回調?

[英]How to deal with Android memory management and onTrimMemory callback?

我有一個帶有許多實例屬性的自定義Application類,而活動依賴於此屬性。 有時,當活動在后台並且我打開應用程序時,會發生一些空指針異常。 我知道導致此問題的原因是Android正在殺死該應用程序。 當我打開應用程序時,將再次創建當前活動,但是現在Application屬性為null。

關於如何解決此問題,我有兩種選擇。 當級別為TRIM_MEMORY_MODERATE或更高級別時,兩種解決方案都需要onTrimMemory方法來清除應用程序緩存。

1º-清除緩存並打開應用程序時,如果必需的Application屬性為null,則當前活動完成。 僅主要活動將再次加載“應用程序”屬性。 這需要較少的工作,因為大多數重構將發生在主要活動中。

2º-每當Application屬性為null時,重構所有活動以從后端加載所有必需的數據。 我在這里有很多工作,因為所有活動都必須獨立並且必須知道如何加載自己的數據。

解決這種Android行為的最佳方法是什么? 您如何解決這個問題? 從自定義Application類清除緩存數據時,我需要做些什么來防止此空指針?

我對您的數據存儲庫體系結構了解不多,但是您應該遵循以下規則:

  1. TRIM_MEMORY_BACKGROUND-嘗試刪除所有大致需要的資源,您知道不需要重新啟動的活動
  2. TRIM_MEMORY_MODERATE-您還可以清除一些Activity所需的資源,這些資源可以由Loader或某些AsyncTask輕松加載
  3. TRIM_MEMORY_COMPLETE-您可能會想清除Application類中的幾乎所有內容,並且只保留最少的內容-Application所需的數據,以啟動並正確還原活動狀態。

除了上述3個之外,我還建議您使用TRIM_MEMORY_UI_HIDDEN,這意味着您不再可見“活動”,並且可以釋放與UI相關的大型資源,尤其是保存在活動內部的位圖:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM