只有在你明确调用finish()时才会调用onDestroy吗?还是有例外吗?

时间:2017-08-24 17:22:39

标签: android broadcastreceiver android-lifecycle ondestroy

我有一个LocalBroadcastReceiver,我unregistering就是ondestroy()

现在我读到这两个SO答案is-ondestroy-not-always-calledwhy-implement-ondestroy-if-it-is-not-guaranteed-to-be-called以及Androi Docs中提及的ondestroy()

  如果显式调用finish();

,将调用

onDestroy

但是为什么在我的情况下,我没有打电话给finish(),但我的所有Android设备每次都会调用ondestroy()。同样根据你们,ondestroy()没有被调用的情况在哪里。

即使Android会杀死我的应用程序(由于内存较少),我也不必担心因为Android会杀死我的整个应用程序,所以接收器最终会被杀死。(所以不会有任何记忆泄漏)。

因此,对于我的用例,哪些情况下ondestroy()不会被调用。

1 个答案:

答案 0 :(得分:2)

  

但是为什么在我的情况下我不是在调用finish()但是仍然会在所有Android设备中调用ondestroy()。

onBackPressed()的默认实现 - 由BACK按钮触发的内容 - 调用finish()

  

无法调用ondestroy()的情况。

  1. 如果您因未处理的异常而崩溃

  2. 如果您的流程以紧急方式终止(例如,系统需要RAM来处理来电)

  3. 如果用户在设置

  4. 中点击应用屏幕上的“强制停止”
  5. 在少数设备上,如果用户使用制造商提供的任务管理器终止您的流程

  6.   

    即使Android会杀死我的应用程序(由于内存较少),我也不必担心,因为Android会杀死我的整个应用程序,因此接收器最终会被杀死

    是的,因为您的整个过程将被终止。