2013-01-03 110 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