When to commit application settings to SharedPreferences (onStop or onDestroy)
我想知道,什么时候可以将我们的应用程序设置保存到sharedreferences。我们应该在onStop或onDestroy期间这样做吗?我意识到这两种方法都有其优缺点。
站上
如果用户不打算退出应用程序,那么将应用程序设置保存到sharedreferences似乎是多余的。他只需按Home键(在顶部调用)->长按Home键->通过再次选择应用程序重新启动应用程序
销毁
用户可以通过按Home键(调用了OnStop)->长按Home键->在应用程序上向左滑动来终止应用程序。如果用户以这种方式退出应用程序,我会意识到虽然应用程序被终止,但并没有调用onDestroy。因此,不保存应用程序设置。
那么,在onStop或onDestroy期间保存应用程序设置更好吗?
- 此外,如果活动是在后台进行的,操作系统可能会在任何时候杀死它,在这种情况下,不会调用onStop()或onDestroy(),如下面所述,onPause()是最安全的"清理"方法。
- 相关错误报告:保存时间指南冲突
- @爱德华·布雷谢谢。看起来很棘手。省时的操作应该在onStop中进行,但onStop不能保证被调用…
最好在进行更改后立即调用commit(),或者在onPause()方法中调用。这可以确保在几乎所有场景中都保存您的更改,除了导致应用程序崩溃的未捕获异常。
另外,您应该注意,无论是onStop()还是onDestroy()都不能保证被调用,特别是在Android内存不足的情况下。然而,几乎总是叫onPause()。
- 在API级别8之后,还有apply()方法在后台执行其工作。一个更好的选择,如果你不依赖结果正在使用。developer.android.com/reference/android/content/…
- 这就引出了一个问题,为什么所有的谷歌例子都使用onPause()的onStop()intead,我自己也一直使用onPause(),但今天注意到一些SO的帖子也暗示了onStop()。developer.android.com/guide/topics/data/data-storage.html开发人员
- 另一方面,在创建下一个活动之前调用onPause(),从而将创建延迟到结束,在启动和显示下一个活动之后调用onStop()。
- 《生命周期指南》说,"不应使用onpause()保存应用程序或用户数据"。不过,它可能假定您使用的是阻塞版本。
我认为Android文档可以很好地解释何时应该从用户那里获取或保存任何数据:
onPause() is where you deal with the user leaving your activity. Most
importantly, any changes made by the user should at this point be
committed (usually to the ContentProvider holding the data).
http://developer.android.com/reference/android/app/activity.html网站
- 另一方面(来自developer.android.com/training/basics/activity lifecycle/…):通常,不应使用onpause()将用户更改存储到永久存储中。在onpause()中,只有在某些用户希望更改自动保存时,才应该将用户更改持久保存到永久存储中。但是,您应该避免在onpause()期间执行CPU密集型工作,例如写入数据库,因为它会减慢到下一个活动的可见转换(您应该在onstop()期间执行重载关闭操作)。