在活动的方法的onDestroy数据保存(Save data in activity's o

2019-07-12 07:04发布

我正在写一个任务列表,并有计划的对象,它包含所有的任务(和元数据)。 我用行动日志,所以当任务的变化,我不立即将其保存到数据库中,只要保持在内存中的活动完成数据库的转储。 活动的方法的onDestroy是这个最好的地方:如果没有onRetainNonConfigurationInstance方法被调用我开始服务,以节省项目(一个人的实例存储在应用程序)。 储蓄是昂贵的:在DB项目中有一个修订版,所以我保存新的数据,改变目前的版本并删除以前的版本的数据。 所以我不害怕suddent应用程序停止。

但aсcording 的文档 ,我必须do not count on this method being called as a place for saving data.

是否有救了我的数据任何其他地方?

Answer 1:

的OnDestroy并不总是会被调用。 从生命周期的文档 -

当你的活动收到调用的onStop()方法,它不再可见,并且应该释放,而用户没有使用它不需要的几乎所有资源。 一旦你的活动已停止,如果需要恢复系统内存的系统可能会破坏实例。 在极端情况下,该系统可以简单地杀死你的应用程序,而无需调用该活动的最终的onDestroy()回调,让你用的onStop()来释放可能导致内存泄漏的资源是非常重要的。

虽然在onPause()方法的onStop()调用之前,你应该使用的onStop()来执行更大,更多的CPU关机操作,比如到数据库中写入信息

见停止你的活动



Answer 2:

你不应该使用onDestroy()用于保存数据的方法。 相反,你应该使用内部/外部存储空间或者在编写代码onPause()方法。



Answer 3:

您应该使用onStop

活动文档

你也可以使用onPause ,但将被称为每当你从导航离开Activity ,包括关闭屏幕。



Answer 4:

据该活动的生命周期的文档 ,你应该保存在数据onPause()onSaveInstanceState(Bundle)

该方法onDestroy()onStop()活动关闭之前可能永远不会被调用。

从摘录活动生命周期的文档 :

保护无效的onDestroy()

注意:不要在这个方法被称为保存数据的地方不算! 例如,如果一个活动是在内容提供商编辑数据,这些修改应该在任何承诺 onPause() onSaveInstanceState(Bundle) ,不是在这里。

保护无效的onStop()

注意,此方法可能永远不会被调用,在低内存情况下的系统没有足够的内存,让您的活动的进程在运行它的onPause()方法被调用后。



文章来源: Save data in activity's onDestroy method