我正在写一个任务列表,并有计划的对象,它包含所有的任务(和元数据)。 我用行动日志,所以当任务的变化,我不立即将其保存到数据库中,只要保持在内存中的活动完成数据库的转储。 活动的方法的onDestroy是这个最好的地方:如果没有onRetainNonConfigurationInstance方法被调用我开始服务,以节省项目(一个人的实例存储在应用程序)。 储蓄是昂贵的:在DB项目中有一个修订版,所以我保存新的数据,改变目前的版本并删除以前的版本的数据。 所以我不害怕suddent应用程序停止。
但aсcording 的文档 ,我必须do not count on this method being called as a place for saving data.
是否有救了我的数据任何其他地方?
的OnDestroy并不总是会被调用。 从生命周期的文档 -
当你的活动收到调用的onStop()方法,它不再可见,并且应该释放,而用户没有使用它不需要的几乎所有资源。 一旦你的活动已停止,如果需要恢复系统内存的系统可能会破坏实例。 在极端情况下,该系统可以简单地杀死你的应用程序,而无需调用该活动的最终的onDestroy()回调,让你用的onStop()来释放可能导致内存泄漏的资源是非常重要的。
虽然在onPause()方法的onStop()调用之前,你应该使用的onStop()来执行更大,更多的CPU关机操作,比如到数据库中写入信息
见停止你的活动
你不应该使用onDestroy()
用于保存数据的方法。 相反,你应该使用内部/外部存储空间或者在编写代码onPause()
方法。
您应该使用onStop
活动文档
你也可以使用onPause
,但将被称为每当你从导航离开Activity
,包括关闭屏幕。
据该活动的生命周期的文档 ,你应该保存在数据onPause()
或onSaveInstanceState(Bundle)
。
该方法onDestroy()
和onStop()
活动关闭之前可能永远不会被调用。
从摘录活动生命周期的文档 :
保护无效的onDestroy()
注意:不要在这个方法被称为保存数据的地方不算! 例如,如果一个活动是在内容提供商编辑数据,这些修改应该在任何承诺 onPause()
或 onSaveInstanceState(Bundle)
,不是在这里。
保护无效的onStop()
注意,此方法可能永远不会被调用,在低内存情况下的系统没有足够的内存,让您的活动的进程在运行它的onPause()方法被调用后。