2012-08-09 28 views
1

我注意到,當android操作系統關閉不在活動堆棧頂部的活動時,我的一些靜態變量變爲null。我絕對相信,變量指向之前的對象,並且我沒有自己改變它們的價值。Android應用程序中的系統可以禁用靜態變量值嗎?

活動重新創建後,我得到nullPointerException會導致我的一個靜態變量(在Application的子類onCreate中初始化,並且應該在流程生命週期的任何時間不爲null)爲null。

因爲它不是我誰沒有變量,我想它是android操作系統,由於缺乏內存關閉後臺活動和空值靜態變量。 這可能嗎?

回答

2

Android不會關閉不在活動堆棧頂部的活動。如果您的應用程序進入後臺並且Android決定要回收內存,則只需殺死承載您的活動的進程。當用戶返回到應用程序時,Android會創建一個新進程並重新創建位於活動堆棧頂部的活動

大多數情況下,這就是你所看到的。顯然,如果你的進程被殺死並重新創建,你的靜態變量將爲空。

+0

我應該在哪裏保存這個靜態變量..共享首選項? – 2013-06-11 14:36:05

+0

這取決於。如果這些是簡單變量,那麼您可以將它們保存在共享首選項中。如果它們更復雜,可以將它們序列化爲一個文件或將它們存儲在SQLite數據庫中。另一種選擇是將它們保存到'onSavedInstanceState()'中的Bundle中,當你的活動被重新創建時,你可以檢查靜態變量是否爲空,如果是,你可以從保存的實例狀態中恢復它們。 – 2013-06-11 15:18:26

+0

其他選項。懶加載他們。注意線程(即將方法同步到「getInstance」),或將它們放入自定義應用程序對象(或將它們加載到那裏)。你不知道什麼Activity會開始,但是應用程序中的Create會被調用。 http://developer.android.com/reference/android/app/Application.html#onCreate()這裏不要做I/O,順便說一句。 – 2013-07-04 05:41:24

1

如果活動正在運行的底層虛擬機/線程被終止,它們只會被清空。那麼它就像你完全重新啓動應用程序。不要依賴靜態變量,如果你需要保持一些東西,將它存儲在數據庫或首選項中。

相關問題