簡體   English   中英

Android:擁有永遠不會被殺死的Singleton類

[英]Android: have Singleton class that will never been killed

在我的Android應用程序中,我有一個Singleton類。 當應用程序任務處於活動狀態時,它就像是一種魅力。 但是在終止應用程序任務之后,Singleton類被銷毀,這很明顯。 我需要讓這堂課永遠活着。 可能嗎? 避免此類被Android系統殺死的最佳方法是什么?在這種情況下,我需要使用后台服務嗎?

為了試圖確保Singleton類始終保留在內存中以便后續調用應用程序而使用Service的設計是非常糟糕的。 這根本不是服務的目的。 參見: http : //www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

如果要確保為下次創建應用程序准備好一堆數據,則應選擇一種適當的方法來保留該數據。 例如,這可以通過使用SharedPreferencesSQL或緩存等來實現,具體取決於您要保留的數據類型。 然后,設計所有Activity類,以正確處理所有Singleton數據均未處於初始化狀態時恢復它們的情況。

我個人維護着一個復雜的科學應用程序,該應用程序依賴於RAM中保存大量單例數據。 我在開發的早期階段遇到的一個重要問題是,可能發生以下情況:

  • 您有三個Activity類(例如); 稱它們為A,B和C。
  • 您已將Singleton數據附加到Application類。
  • 用戶使用該應用程序,然后導航到應用程序C。這時,已經初始化了許多Singleton數據。 然后,用戶導航回到家(啟動器)。
  • 同時,您的應用程序的Application類以及它在用戶與其他應用程序交互時使用的任何Service被銷毀和創建(可能要重復幾次)。
  • 稍后,用戶返回到您的應用程序。 恢復了活動堆棧,這意味着用戶直接進入了活動C。但是,單例數據現在已全部消失。 使用活動的“空”未初始化數據集啟動C可能會導致崩潰或向用戶顯示空白頁。
  • 關鍵點:有可能恢復Activity堆棧,以便即使Application類已重新啟動並且所有全局數據已從軌道移走,應用也可恢復到Activity C上。

為了應對上述情況,我要做的關鍵是確保所有Activity都不會僅僅假設在Activity啟動時就存在完整的全局(Singleton)數據。 我的應用程序中依賴於全局Singleton數據的每個Activity首先檢查該數據,如果未初始化,則調用Application類中的方法以觸發該數據的重新生成(在我的情況下,這涉及從文件中檢索該數據。 SD卡)。

簡而言之,在Android中處理全局/單例數據需要一些注意和考慮。 您不能強迫系統無限期地避免殺死您的應用程序,從而殺死所有您的Singleton數據。 因此,我學到的關鍵知識是持久性和檢索數據,並設計Activity類以正確處理在創建Activity時未發現尚未初始化Singleton數據的情況。

是的,您需要使用后台服務。后台服務是與其他所有組件相比在被殺死方面具有最高優先級的組件,但是請確保或服務應連續運行。

嘗試使用moveTaskToBack() 這應該夠了吧。

暫無
暫無

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

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