1

我正在構建一個新的android應用程序,它使用來自服務器的數據通過不同的活動。活動 - 共享數據(單身數據類)

當前我有2個活動,主要連接到服務器並使用服務器中的數據創建單一對象(這是所有活動共享的)。

很明顯,我有一個單例類中保存的數據實例,並從靜態方法獲取對象。

我知道這不是實現活動間共享數據的最佳方式 - 我可以通過意圖傳遞它們(但我計劃創建更多使用相同數據的3-4個活動,爲什麼要通過它們當你可以讓它們在應用程序的全局靜態上下文中)。

這是什麼實現了我到是這個問題: 當用戶在第二活動切換到另一個應用程序,和我的應用程序停留在背景一段時間,Android的釋放由應用程序所使用的內存,而當返回它,當使用單例對象的一個​​字段時,我得到空指針異常!

我通過返回主活動(如果對象爲空)來重新創建數據來解決問題,但這會使活動在每次銷燬時都重新連接(這不是最佳的,因爲服務器上的數據不會發生更改許多)。 我知道我必須保存服務器數據onDestroy,並在每次返回活動時重新創建對象,但這必須發生在每個活動上,並且數據大約爲4-5KB,這意味着它需要寫入文件,並解析它需要時間(訪問手機SD卡)。

我開始考慮使用Parcelable對象來通過意圖共享數據 - 我認爲android可以自動保存並以最佳方式恢復意圖數據。 (ref:http://bimbim.in/post/2010/09/27/Android-Passing-object-from-one-activity-to-another.aspx

問題是,意圖解決我的問題? 還有其他的方法嗎?更好,更快的方式?

Thanx!

回答

1

我相信這個問題涉及到活動的生命週期。當Android殺死您的活動時,您可以使用主要活動的onRestoreInstanceState()方法將數據保存爲捆綁包,因此當活動重新創建時,您可以在活動的onCreate()方法(參見here作爲示例)上恢復數據。您也可以在活動的onResume()onPause()方法中使用SharedPreferences。採用這兩種方法的想法都是一樣的:您將對象/數據臨時保存在磁盤上,並在稍後恢復。