为什么不保证调用onDestroy()?

uTu*_*Fan 45 android activity-lifecycle android-activity

根据android Activity Lifecycle,唯一保证被调用的回调(如果一个活动离开Running状态,这通常是预期的)onPause().

因此,我必须假设有些情况下实施它们是有意义的onStop(),onDestroy()尽管它们并没有真正保证被调用.

我理解,onStop()当一个活动可能通过Stopped状态返回Running状态时应该实现(为什么它会这样做而不是直接返回是一个不同的问题).

但是onDestroy(),当我可以将所有清理/状态保存放入时onPause(),需要我不清楚.

你能描述一下实际的应用情况(即不能驾驶汽车等),实施它是否合理onDestroy()

Blu*_*ell 25

如果显式调用finish(),将调用onDestroy; 你自己.

您的主要活动在地图活动上调用startActivityForResult.

使用LocationListener映射活动,用户单击地图并选择说当地餐馆.

然后,活动设置一些附加内容以发送回主活动,然后显式调用finish(); 在onDestroy上,它会杀死LocationListener和你调用过的其他变量.

刚刚在文档中找到了这个

onDestroy()=在销毁活动之前收到的最终通话.这可能是因为活动正在完成(有人称为finish(),或者因为系统暂时销毁此活动实例以节省空间.您可以使用isFinishing()方法区分这两种情况.

  • 这是有道理的,但没有完全回答.我可以看到onDestroy可以使用的情况,但我们如何处理剩下的?在给定的示例中,如果活动被终止并且未调用onDestroy将会发生什么...看起来像LocationListener将不会被销毁,因为我们依赖onDestroy来执行此操作.更好的例子:我有一个在Activity中运行的AsyncTask.它下载图像.我在onDestroy中取消它(因为onStop不合适,每当应用程序最小化时都会调用它).那么如果活动被"杀死"怎么办?任务会继续运行吗? (5认同)
  • 这不是问题的答案.OP实际上问为什么使用`onDestory`如果可以在`onPause`中使用`isFinishing()`? (3认同)