Android Oreo 上的广播接收器

Broadcast Receiver on Android Oreo

我有一个网络更改接收器 class,它从广播接收器扩展而来,但我不太确定它是否在 android Oreo 中工作,Oreo 是否支持广播接收器,如果它不支持,还有什么办法

Oreo 不支持将其作为清单标签,您必须使用 context.registerReceiver() 在服务/Activity 中注册它。或者您使用 WorkManager 为特定的网络条件安排一些事情。

Oreo 支持广播接收器,但对清单中声明的​​隐式广播有一些限制。

隐式与显式广播:

According to the documentation, an implicit broadcast is a broadcast that does not target that app specifically. For example, ACTION_PACKAGE_REPLACED 是隐式广播,因为它被发送给所有注册的侦听器,让他们知道设备上的某些包已被替换。

但是,ACTION_MY_PACKAGE_REPLACED 不是隐式广播,因为它只发送到包被替换的应用程序,无论有多少其他应用程序已经为该广播注册了侦听器。

因此,我们在应用程序清单中静态定义的任何正在侦听隐式广播的广播接收器将不再接收这些广播。

此更改的原因是隐式广播之前会触发清单中正在侦听它们的任何组件——这可能会对应用程序和设备性能产生不利影响,因为有大量应用程序注册接收特定广播全部同时触发。

但是当涉及到隐式广播时,有一个例外列表 — 这意味着您仍然可以注册接收广播。它们都列在下面:

因此,如果您为其注册接收器的广播在此列表中,那么它仍将像以前一样运行。但是,如果您注册接收的广播不在此列表中,那么您应该使用一些替代解决方案,例如:

  • 通过调用 Context.registerReceiver() 在运行时创建接收器, 而不是在清单中声明接收者。
  • 使用计划的作业来检查本应具有的条件 触发隐式广播。

For more information