将数据保存在活动的onDestroy方法中

我正在写一个任务列表,并拥有项目对象,其中包含所有的任务(和元数据)。 我使用动作日志,所以当任务更改时,我不会立即将其保存到数据库,只要将其保存在内存中,以便在活动完成时将数据转储到数据库中。 Activity的onDestroy方法是最好的地方:如果没有onRetainNonConfigurationInstance方法被调用,我启动服务来保存项目(一个人的实例存储在应用程序中)。 节省昂贵:在DB项目有修改,所以我保存新的数据,改变当前的修订,并删除以前的修订的数据。 所以我不害怕突然的申请停止。

但是, 根据文档,我不得不do not count on this method being called as a place for saving data.

有没有其他地方保存我的数据?

Solutions Collecting From Web of "将数据保存在活动的onDestroy方法中"

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

当您的活动接收到对onStop()方法的调用时,它将不再可见,并且应该释放几乎所有在用户不使用时不需要的资源。 一旦您的活动停止,系统可能会销毁实例,如果它需要恢复系统内存。 在极端情况下,系统可能会简单地终止您的应用程序进程而不调用活动的最终onDestroy()callback,因此使用onStop()释放可能会泄漏内存的资源非常重要。

尽pipe在onStop()之前调用了onPause()方法,但是您应该使用onStop()执行更大,更占用CPU的closures操作,例如将信息写入数据库

请参阅停止您的活动

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

你应该使用onStop

活动文档

你也可以使用onPause ,但是当你离开Activity时候会被调用,包括closures屏幕。

根据Activity Lifecycle文档,您应该将数据保存在onPause()onSaveInstanceState(Bundle)

在活动closures之前,方法onDestroy()onStop()可能永远不会被调用。

活动生命周期文档摘录如下:

保护无效的onDestroy()

注意:不要指望这个方法被称为保存数据的地方! 例如,如果某个活动正在编辑内容提供者中的数据,那么这些编辑应该在 onPause() onSaveInstanceState(Bundle) 提交 ,而不是在这里。

保护无效onStop()

请注意,在内存不足的情况下,可能永远不会调用此方法,因为系统没有足够的内存来保存活动的进程在调用onPause()方法后运行。