【问题标题】:When to save SharedPreferences?何时保存 SharedPreferences?
【发布时间】:2012-12-18 00:56:43
【问题描述】:

我想在我的应用关闭时保存一些小数据结构(总共约 1kB)以及用户的偏好。设置仅在我的 PreferenceActivity 中修改,但数据结构几乎在每个活动中都进行了修改。我扩展了Application 并将所有数据结构和首选项设为静态。然后我尝试在我的应用程序类的onTerminate() 中保存到 SharedPreferences 并在onCreate() 中再次加载它。但是,onTerminate()documentation 声明“它永远不会在生产的 Android 设备上调用,在这些设备上,只需简单地杀死进程就可以删除它们”。

this question 的答案建议在每个活动修改其数据的 onStop() 方法中保存到 SharedPreferences。这会保证数据在所有情况下都保存吗?有没有办法避免每次用户在活动之间转换时浪费保存(或者我什至应该关心)?

【问题讨论】:

  • 你不能简单地在你的Application 类中创建一个方法来保存所有的sharedPrefs,然后在需要时从Activity 调用它吗?
  • 是的,我可以创建一个静态方法,但我应该在活动生命周期中的什么地方调用它?
  • 好吧,您说“当您的应用程序关闭时”,所以我想在onDestroy 中,用户将看到最后一个Activity。或者可能是其中之一“你确定要离开吗?” Dialogs.
  • 问题是用户可以离开任何活动(例如打电话),所以有相当多的浪费。
  • onDestroy() 不能保证被调用,而onStop() 可能会在您的下一个活动开始后被调用,所以onPause() 可能是最好的地方。

标签: android sharedpreferences activity-lifecycle


【解决方案1】:

老实说,我会按照 Android 的建议将每个活动的 onPause() 保存(即,当您写电子邮件时,请注意在应用暂停时如何保存草稿,例如屏幕关闭时)。除非您注意到它会导致滞后/延迟,否则它可能不会太重要。

如果您确实注意到这种“自动保存”方法滞后,那么您可能应该在每个活动中实现某种“保存”功能,例如,可能需要使用 @987654322 @/AsyncTask组合。

【讨论】:

  • 如果你使用apply()而不是commit(),它应该不会在UI线程中造成任何延迟。
猜你喜欢
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 2017-10-15
  • 2013-03-06
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多