android - 如果 onStop() 不会被调用,我在哪里可以注销我的 Broadcastreceiver?

标签 android broadcastreceiver android-lifecycle

我问了这个问题Is onDestroy called only if you explicitly call finish() ?? or are there any exceptions? 现在回答我明白了

where are the cases where ondestroy() not get called up.

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

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

  3. 如果用户在“设置”中点击应用屏幕上的“强制停止”

  4. 在一些设备上,如果用户使用制造商提供的任务管理器终止您的进程

现在至于这些情况,因为 onDestroy() 不会被调用,所以我想试试 onStop()

但对于上述所有情况,即使我将在 onStop() 中编写代码以取消注册 接收器,它仍然不会被调用,因为我的接收器将已注册。

所以现在我的问题是,当上述四种情况中的任何一种发生时,我在哪里可以编写我的代码来注销接收器。

Also if it is not possible then i guess as for both onStop() and onDestroy() for these four cases we cannot rely on them to unregister our receiver then why in Android docs it is written to not use onDestroy() even both are equally unreliable ??

他们不应该说这两个函数不应该用于释放资源(注销接收者)

解决方案- 根据commonsware回答

In all three of these cases, your process is gone, and therefore your BroadcastReceiver is also gone. There is nothing to unregister.

因为 broadcastreceiver 也消失了,所以不需要取消注册接收器,所以我认为如果我将使用 onDestroy()<,在所有这三种情况下都不会有任何问题 注销 接收器。

仅针对 1 个案例,我将尝试实现我自己的顶级未捕获异常处理程序,因为不会为此调用 onDestroy()。

最佳答案

But as for all above cases even if i will write code in onStop() to unregister the receiver then still it will not get called

对于上述三种情况,绝大多数情况下,onStop() 将被调用:

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

  • 如果用户在“设置”中点击应用屏幕上的“强制停止”

  • 在一些设备上,如果用户使用制造商提供的任务管理器终止您的进程

Android 不会终止从 UI 角度来看处于前台的进程。在所有这些情况下,绝大多数情况下,您的应用不会在前台运行,因此将调用 onStop()

此外,在所有这三种情况下,您的进程都消失了,因此您的 BroadcastReceiver 也消失了。没有什么可以注销的。这就是为什么人们往往不太担心这些情况的原因之一。 onDestroy() 用于清理可能阻止您的 Activity 被垃圾收集的东西,如果您的进程终止,您的 Activity 和所有其他对象都将消失。

剩下的四种情况中的一种情况是您的应用因未处理的异常而崩溃。在那种情况下,您的应用程序会严重困惑。如果您有自己的顶级未捕获异常处理程序,您可能会考虑终止自己的进程作为清理的一部分。

关于android - 如果 onStop() 不会被调用,我在哪里可以注销我的 Broadcastreceiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551203/

相关文章:

android - 当我使用 TYPE_APPLICATION_OVERLAY 时,对话框不可见

android - SMS 通知的行为

android - 如何在 Android 8 上获得广播 ACTION_POWER_CONNECTED

android - 通过 LocalBroadcastManager 调用 fragment 中的方法

java - 如何重命名内部存储中的文件?

android - 广播收到两次

Android:如何记录所有 Activity 方法调用?

android - android是否保存静态变量?

java - Android任务生命周期和静态数据,任务是否曾经被销毁过?

java - 在java中划分每个长数