2013-01-03 153 views
0

我想在應用程序關閉時保存一些小的數據結構(總共約1kB)以及用戶的偏好。這些設置僅在我的PreferenceActivity中進行了修改,但數據結構幾乎在每個活動中都進行了修改。我擴展了Application並使所有數據結構和首選項靜態化。然後我嘗試在我的應用程序類onTerminate()中保存到SharedPreferences中,然後在onCreate()中再次加載它。但是,onTerminate()documentation指出:「它永遠不會在生產型Android設備上調用,其中的進程通過簡單地將其刪除而被刪除」。何時保存SharedPreferences?

this question的答案建議在每個活動的onStop()方法中將SharedPreferences保存爲修改其數據的方法。這將保證數據保存在全部個案中?有沒有一種方法可以避免每次用戶在活動之間轉換時的浪費(或者我應該關心)?

+0

你不能簡單地在你的'Application'類中做一個方法來完成所有的sharedPrefs保存,然後當你需要時從'Activity'調用它嗎? – mango

+0

是的,我可以創建一個靜態方法,但我應該在活動生命週期內將其稱爲它? –

+0

好吧,你說的「當你的應用程序關閉」,所以我想在'onDestroy'中可以看到用戶將看到的最後一個'Activity'。或者可能是其中一個「你確定要離開嗎?」 'Dialogs'。 – mango

回答

2

我誠實地說,就像Android推薦的那樣,保存在每個活動的onPause()中(即當你寫電子郵件時注意應用程序暫停時如何保存草稿,如屏幕關閉)。除非你注意到它引起滯後/延遲,否則它可能無關緊要。

如果你通知這個「自動保存」方法滯後,那麼你或許應該有某種的每個活動,這可能,例如,意味着使用ProgressDialog/AsyncTask組合實現「保存」功能。

+0

如果使用'apply()'而不是'commit()',它不會在UI線程中造成任何延遲。 – Loolooii