【问题标题】:How a broadcast receiver can function normally even on app crash即使应用程序崩溃,广播接收器如何正常工作
【发布时间】:2017-11-16 22:20:17
【问题描述】:

问题场景:我有一个带有静态注册广播接收器的 android 应用程序,该接收器具有为 AIRPLANE_MODE 注册的意图过滤器工作正常。当我打开飞行模式时,会显示祝酒词。 当我强制停止我的应用程序时,广播接收器不起作用,这是预期的结果。但是现在当我的应用程序崩溃时,广播接收器仍在显示 toast。所以,我的问题是为什么我的广播接收器即使在应用程序崩溃时也能正常工作,而当我强制停止应用程序时它被破坏了。如果有人可以清楚地了解 App Force Stop 场景,那将非常有帮助。

【问题讨论】:

  • 我认为静态接收器是在您的应用程序上下文之外注册的。与您无需运行应用程序即可工作的方式相同。但是强制停止会停止与您的包裹 ID 相关的所有内容。
  • 嗨,你的回答是解释性的,所以我理解强制停止的情况,但在其中一篇文章中,我读到应用程序崩溃停止了广播接收器,这在我的情况下没有发生。那么广播接收器在应用崩溃时会发生什么。

标签: android android-broadcastreceiver


【解决方案1】:

在您的应用中,您有 4 个点用于启动您的应用:BroadcastReceiver、Activity、Service、 ContentProvider。

因此,如果您在 AndroidManifest 中注册 BroadcastReceiver,即使您强制停止应用程序,您实际上也会在 BroadcastReceiver 中获得回调,因为它是启动应用程序的一个点。您实际上可以通过以下代码以编程方式禁用 BroadcastReceiver:

ComponentName component = new ComponentName(context, YourReceiver.class); 

//Disable BroadcastReceiver
context.getPackageManager().setComponentEnabledSetting(component,  PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);

//Enable BroadcastReceiver
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);

【讨论】:

  • 当我执行强制停止时,广播接收器没有响应系统通知(AIRPLANE_MODE),这是正确的。因此,我预计应用程序崩溃的结果相同,即一旦我的应用程序崩溃,我的广播接收器不应该被触发,但这不是场景,因为我的广播接收器即使在应用程序崩溃时也会响应系统通知。怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多