10

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

但是,根据文件我必须do not count on this method being called as a place for saving data.

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

4

4 回答 4

20

OnDestroy 并不总是会被调用。来自生命周期文档——

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

虽然 onPause() 方法在 onStop() 之前调用,但您应该使用 onStop() 来执行更大、更占用 CPU 的关闭操作,例如将信息写入数据库

请参阅停止您的活动

于 2012-12-19T16:23:43.633 回答
4

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

于 2012-12-19T16:41:13.533 回答
3

你应该使用onStop

活动文档

您也可以使用onPause,但每当您离开 时都会调用它Activity,包括关闭屏幕。

于 2012-12-19T16:21:54.053 回答
2

根据活动生命周期文档,您应该将数据保存在onPause()或中onSaveInstanceState(Bundle)

在活动关闭之前onDestroy(),可能永远不会调用这些方法。onStop()

活动生命周期文档摘录:

受保护的无效onDestroy ()

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

受保护的无效onStop ()

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

于 2014-02-06T12:11:25.283 回答