Android Oreo上的广播接收器

Ede*_*lla 6 android broadcastreceiver android-studio android-8.0-oreo

我有一个网络更改接收器类,它扩展到广播接收器,但我不太确定它在android Oreo中工作,Oreo是否支持广播接收器,如果它不支持,那么另一种方法是什么

Rah*_*hni 13

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

隐式与显式广播:

根据文档,隐式广播是一种不专门针对该应用的广播.例如,ACTION_PACKAGE_REPLACED是隐式广播,因为它被发送到所有已注册的侦听器,让他们知道设备上的某些包被替换.

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

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

这种变化的原因是隐式广播之前会触发在清单中监听它们的任何组件 - 这可能会对应用程序和设备性能产生负面影响,因为大量应用程序注册接收特定广播都会在同时.

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

在此输入图像描述

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

  • 通过调用Context.registerReceiver()而不是在清单中声明接收器来在运行时创建接收器.
  • 使用预定作业来检查可能触发隐式广播的条件.

欲获得更多信息


小智 3

Oreo 不支持将其作为清单标记,您必须使用 context.registerReceiver() 在服务/活动中注册它。或者您使用 WorkManager 来针对特定网络条件安排某些内容。