隐式广播例外
作为Android 8.0(API级别26)后台执行限制的一部分,针对API级别26或更高级别的应用程序无法再在其清单中为隐式广播注册广播接收器。但是,目前有几个广播免于这些限制。无论应用程序所针对的API级别如何,应用程序都可以继续为以下广播注册监听器。
注意:即使这些隐式广播仍然在后台工作,您应该避免为它们注册侦听器。
ACTION_LOCKED_BOOT_COMPLETED
, ACTION_BOOT_COMPLETED
免除,因为这些广播仅在首次启动时发送一次,并且许多应用需要接收此广播以安排作业,警报等。
ACTION_USER_INITIALIZE
,"android.intent.action.USER_ADDED"
,"android.intent.action.USER_REMOVED"
这些广播受特权权限保护,因此大多数普通应用程序无论如何都无法接收它们。
"android.intent.action.TIME_SET"
,ACTION_TIMEZONE_CHANGED
,ACTION_NEXT_ALARM_CLOCK_CHANGED
当时间,时区或警报发生变化时,时钟应用可能需要接收这些广播以更新警报。
仅在区域设置更改时发送,这不常见。应用可能需要在区域设置更改时更新其数据。
ACTION_USB_ACCESSORY_ATTACHED
,ACTION_USB_ACCESSORY_DETACHED
,ACTION_USB_DEVICE_ATTACHED
,ACTION_USB_DEVICE_DETACHED
如果应用程序需要了解这些与USB相关的事件,目前还没有一个很好的替代方案来注册广播。
ACTION_CONNECTION_STATE_CHANGED
,ACTION_CONNECTION_STATE_CHANGED
,ACTION_ACL_CONNECTED
,ACTION_ACL_DISCONNECTED
如果应用接收这些蓝牙事件的广播,则用户体验不太可能受到影响。
ACTION_CARRIER_CONFIG_CHANGED
,TelephonyIntents.ACTION_*_SUBSCRIPTION_CHANGED
,"TelephonyIntents.SECRET_CODE_ACTION"
,ACTION_PHONE_STATE_CHANGED
,ACTION_PHONE_ACCOUNT_REGISTERED
,ACTION_PHONE_ACCOUNT_UNREGISTERED
OEM电话应用可能需要接收这些广播。
某些应用需要了解登录帐户的更改,以便他们可以为新帐户和已更改帐户设置计划操作。
删除帐户后,可以看到帐户的应用会收到此广播。如果这是应用程序需要执行的唯一帐户更改,则强烈建议应用程序使用此广播 而不是已弃用LOGIN_ACCOUNTS_CHANGED_ACTION
。
仅在用户明确清除“设置”中的数据时发送,因此广播接收器不太可能显着影响用户体验。
某些应用可能需要在删除其他包时更新其存储的数据; 对于这些应用程序,注册此广播没有其他好的选择。
注意:其他与包相关的广播(例如ACTION_PACKAGE_REPLACED
)不受新限制的豁免这些广播很常见,对豁免它们有潜在的性能影响。
响应用户拨打电话而采取措施的应用需要接收此广播。
这种广播不经常发送; 一些应用需要接收它,以便他们知道设备的安全状态已经改变。
由日历提供商发送,以向日历应用发布活动提醒。由于日历提供程序不知道日历应用程序是什么,因此该广播必须是隐含的。
ACTION_MEDIA_MOUNTED
,ACTION_MEDIA_CHECKING
,ACTION_MEDIA_UNMOUNTED
,ACTION_MEDIA_EJECT
,ACTION_MEDIA_UNMOUNTABLE
,ACTION_MEDIA_REMOVED
,ACTION_MEDIA_BAD_REMOVAL
这些广播是由于用户与设备的物理交互(安装或删除存储卷)或作为启动初始化的一部分(因为可用卷已安装)而发送的,因此它们不常见,通常由用户控制。
SMS_RECEIVED_ACTION
, WAP_PUSH_RECEIVED_ACTION
短信收件人应用程序依赖这些广播。