我正在编写一个任务列表并拥有Project对象,该对象包含所有任务(和元数据)。我使用操作日志,因此当任务更改时我不会立即将其保存到数据库,只需将其保存在内存中以在活动结束时转储到数据库中。 Activity的onDestroy方法是最好的地方:如果没有调用onRetainNonConfigurationInstance方法,我启动服务来保存项目(一个实例存储在Application中)。节省成本:在DB项目中有修改,所以我保存新数据,更改当前版本并删除以前版本的数据。所以我不害怕突然申请停止。
但是,to documentation我必须do not count on this method being called as a place for saving data.
是否有其他可以保存数据的地方?
答案 0 :(得分:18)
并不总是会调用OnDestroy。从生命周期文档 -
当您的活动收到对onStop()方法的调用时,它是否定的 更长时间可见,并应释放几乎所有非资源 在用户不使用它时需要。一旦您的活动停止, 如果需要恢复系统,系统可能会销毁该实例 记忆。在极端情况下,系统可能会简单地杀死您的应用 进程没有调用活动的最终onDestroy()回调,所以 使用onStop()释放可能泄漏的资源非常重要 存储器中。
虽然在onStop()之前调用了onPause()方法,但是你应该这样做 使用onStop()执行更大,更密集的CPU关闭 操作,例如将信息写入数据库
答案 1 :(得分:4)
您不应使用onDestroy()
方法来保存数据。相反,您应该使用内部/外部存储空间或使用onPause()
方法编写代码。
答案 2 :(得分:3)
答案 3 :(得分:2)
根据Activity Lifecycle documentation,您应该将数据保存在onPause()
或onSaveInstanceState(Bundle)
中。
在关闭活动之前,可能永远不会调用方法onDestroy()
和onStop()
。
摘自Activity Lifecycle documentation:
protected void onDestroy()
注意:不要指望将此方法称为保存位置 数据!例如,如果活动正在编辑内容中的数据 提供商,应该在
onPause()
或中提交这些修改onSaveInstanceState(Bundle)
,不在此。protected void onStop()
请注意,在系统没有的低内存情况下,可能永远不会调用此方法 足够的内存,以便在调用onPause()方法后保持活动进程正常运行。