我的應用程序進入後臺時導致靜態數據實例丟失,導致空指針異常錯誤。在Android Studio中失去對靜態數據的引用
靜態數據非常依賴上下文或「狀態」,並且在初始化時不能一般生成。
爲了確保我一直保持這個數據,我會力將數據寫入到存儲或本是否能保證我的靜態數據,當應用程序投入的背景是不是失去了一些其他的方式?
我的應用程序進入後臺時導致靜態數據實例丟失,導致空指針異常錯誤。在Android Studio中失去對靜態數據的引用
靜態數據非常依賴上下文或「狀態」,並且在初始化時不能一般生成。
爲了確保我一直保持這個數據,我會力將數據寫入到存儲或本是否能保證我的靜態數據,當應用程序投入的背景是不是失去了一些其他的方式?
靜態字段是類的一部分,而不是對象。當Android回收內存時,靜態字段也將被回收,並且您將丟失所有數據。請記住,操作系統在任何時候都可以在應用程序處於後臺時回收內存。
如果您有要保留狀態,你需要把它堅持到磁盤,在Android上,依靠任何真實保存在內存中的背景是一個冒險的策略。
我會爲此使用共享首選項,但是如果您願意,也可以使用序列化文件流。共享首選項更容易且記錄完備。
在你的onResume()方法,你會讀回值和你當然堅持他們的onPause()。這也將允許您處理例如打電話或用戶切換到其他應用程序的情況,即使只是片刻。
很好的回答!我在這個問題上閱讀了很多答案,但這是最好的。簡短,簡單明瞭。 –
哇謝謝你Monish!這可能是因爲我搞砸了很多次,我終於學到了。 – Ewald
當您的應用程序在後臺並且操作系統決定要回收內存時,它可能會終止進程。在這種情況下,當您返回到應用程序時,進程將被重新創建,您的靜態變量將被初始化。
如果你想保持重要的東西,把它們放在SharedPreferences
,數據庫,或將其序列化到一個文件,根據您的需要。
準確地說:當你的應用切換到背景時,你的應用中的某些* static *字段是否爲null? – GhostCat
是的,特別是靜態字段。 –
使用偏好設置,一旦應用程序變爲背景,您如何依賴靜態變量。 – Sush