将数据保存在activity的onDestroy方法中

时间:2012-12-19 16:15:35

标签: android android-service android-sqlite ondestroy

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

但是,to documentation我必须do not count on this method being called as a place for saving data.

是否有其他可以保存数据的地方?

4 个答案:

答案 0 :(得分:18)

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

  

当您的活动收到对onStop()方法的调用时,它是否定的   更长时间可见,并应释放几乎所有非资源   在用户不使用它时需要。一旦您的活动停止,   如果需要恢复系统,系统可能会销毁该实例   记忆。在极端情况下,系统可能会简单地杀死您的应用   进程没有调用活动的最终onDestroy()回调,所以   使用onStop()释放可能泄漏的资源非常重要   存储器中。

     

虽然在onStop()之前调用了onPause()方法,但是你应该这样做   使用onStop()执行更大,更密集的CPU关闭   操作,例如将信息写入数据库

请参阅Stop Your Activity

答案 1 :(得分:4)

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

答案 2 :(得分:3)

您应该使用onStop

Activity docs

你也可以使用onPause,但只要你离开Activity,就会调用它,包括关闭屏幕。

答案 3 :(得分:2)

根据Activity Lifecycle documentation,您应该将数据保存在onPause()onSaveInstanceState(Bundle)中。

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

摘自Activity Lifecycle documentation

  

protected void onDestroy()

     

注意:不要指望将此方法称为保存位置   数据!例如,如果活动正在编辑内容中的数据   提供商,应该在 onPause() 中提交这些修改   onSaveInstanceState(Bundle) ,不在此。

     

protected void onStop()

     

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