2012-10-09 35 views
3

我正在開發一個由10多個活動組成的Android應用程序。我有幾個狀態對象,幾乎在每個活動中都可以訪問,爲此,這些對象在MyApplication類中作爲全局靜態變量實現。Android應用程序類中的持久狀態

我注意到,只要用戶在應用程序中,這種方法就可以。但是,當他按下主頁按鈕並打開其他應用程序,然後通過「最近的活動」按鈕返回到我的應用程序時,我看到Android系統重置了MyApplication中的靜態圖,因此我必須處理NullPointerExceptions。我知道這種行爲是由Android殺死和重新創建應用程序進程造成的。

我知道持久這種數據的最好方法是使用SharedPreferences或SQLite,並且我沒有問題檢查MyCate == null是否在onCreate並恢復它,但問題是我沒有知道正確地存儲我的狀態對象(在首選項或數據庫中)。我試圖覆蓋MyApplication的finalize() - 不行,我看到onLowMemory可能不會被調用,我不明白我該如何使用onPause,OnStop等等,因爲我有很多活動,以至於序列化反序列化會相當多減慢應用程序。

有什麼想法? 在此先感謝!

+0

如果數據不是很大,請將您的持久性對象設置爲Singleton。 – vrs

+0

因此,當Android操作系統將重新創建應用程序進程,因此重新創建應用程序類,這個對象將恢復其狀態? – rrdev

+0

應用程序的重新啓動/休閒取決於幾個因素,如內存,應用程序的實時數量,當前沒有運行的服務等。因此,將您的數據保存在主要活動中銷燬或在Destroy上應用。 – vrs

回答

1

最好不要依賴Application類,除非你需要加載一些數據,在其他任何事情開始之前。 Android可以隨時殺死你的進程來釋放資源,所以你的應用應該能夠處理這個。將所有數據保存在snigleton類中,並且延遲加載 - 檢查是否爲空,如果是,則加載第一次訪問。它需要持續執行,考慮將其歸檔/共享首選項。如果沒有,你的應用程序或許可以生活離不開它,所以只要確保你檢查null

一般來說,你應該堅持的狀態時,活動變爲不活動 - onStop()onPause(),但你能儘快保存,因爲它是有意義的(例如,用戶輸入了所有需要的數據)。分離AsyncTask以將數據保存在後臺並讓用戶繼續工作。

+0

這一切都很合理,但我們在這裏談論的是一個具有大約10個輸入屏幕的應用程序(用戶被要求輸入數據)。所有信息都存儲在一些狀態對象中,這些對象用於在此流程結束時執行一些任務。每當這些活動之一進入onPause或onStop時,這是否是運行某種SaveAsyncTask(這會將數據保存在文件/首選項等中)的最佳實踐? – rrdev

+0

如果你有10個屏幕,你應該檢查你的設計。如果您希望用戶能夠從他們離開的地方拿起它,那麼在每個屏幕轉換中保存狀態將是一個不錯的主意。 –

+1

@NikolayElenkov你在哪裏掛/宣佈你的單身人士課程?你應該使用什麼應用程序類? – powder366