我有一個自定義的應用程序類與很多實例屬性和活動依賴於此屬性。有時當活動在後臺並且我打開應用程序時,會發生一些空指針異常。我知道這個問題的原因是Android正在殺死該應用程序。當我打開應用程序時,將再次創建當前活動,但現在應用程序屬性爲空。如何處理Android內存管理和onTrimMemory回調?
我有兩個選擇來解決這個問題。當級別爲TRIM_MEMORY_MODERATE或更高時,兩種解決方案均需要使用onTrimMemory方法清除應用程序緩存。
1º - 清除緩存並打開應用程序時,如果所需的應用程序屬性爲空,則當前活動結束。只有主要活動會再次加載應用程序屬性。這需要較少的工作,因爲最重構將發生在主要活動中。
2º - 每次應用程序屬性爲空時,重構所有要從後端加載所有必需數據的活動。在這裏我有很多工作,因爲所有的活動都必須是獨立的,並且必須知道如何加載他自己的數據。
處理此Android行爲的最佳方法是什麼?你如何解決這個問題?當緩存數據從自定義Application類中清除時,我需要做些什麼來防止這個空指針?
我決定使用TRIM_MEMORY_MODERATE,但我需要更多詳細信息,說明清除緩存時應該如何處理這些活動。 AsyncTask例如應該放在onResume中?現在,我正在完成沒有找到緩存上的屬性時的活動。 –
你不應該那樣做,你不應該手動完成你的活動,只要它是根據你設計/功能流程的想要的行爲。對於大多數情況下應該使用AsyncLoaders來加載所需資源的活動,他們已經爲您處理了緩存,並且在活動被銷燬時它們將被清除。 –
我現在面臨的最大問題是有四個片段(tabLayout)的活動。他們以前已經呈現過。當此活動恢復時,我需要使用實際數據刷新所有視圖。該活動的onResume首先被調用並從後端加載基本數據。片段onResume並行運行,因爲onResume活動異步加載。片段也從後端加載數據。這在recyclerviews和其他組件中造成了一種奇怪的行爲,因爲它必須按照第一次加載的順序運行。 –