作为 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_LOCALE_CHANGED
- 仅在语言环境更改时发送,这种情况并不常见。应用可能需要在语言环境更改时更新其数据。
ACTION_USB_ACCESSORY_ATTACHED
、ACTION_USB_ACCESSORY_DETACHED
、ACTION_USB_DEVICE_ATTACHED
、ACTION_USB_DEVICE_DETACHED
- 当应用需要了解这些与 USB 相关的事件时,没有比注册广播更好的替代方案。
BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
、BluetoothA2dp.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_ACCOUNT_REMOVED
- 具有帐户可见性的应用在帐户被移除时会收到此广播。如果这是应用需要采取操作的唯一帐户更改,我们建议应用使用此广播而不是已弃用的
LOGIN_ACCOUNTS_CHANGED_ACTION
。 ACTION_PACKAGE_DATA_CLEARED
- 仅在用户从“设置”中显式清除其数据时发送,因此广播接收器不太可能显著影响用户体验。
ACTION_PACKAGE_FULLY_REMOVED
某些应用需要在移除另一个软件包时更新其存储的数据。对于这些应用,没有比注册此广播更好的替代方案。
注意:其他与软件包相关的广播(例如
ACTION_PACKAGE_REPLACED
)不受后台执行限制的豁免。这些广播非常普遍,因此豁免它们可能会对性能产生潜在影响。ACTION_NEW_OUTGOING_CALL
响应用户拨打电话而采取操作的应用需要接收此广播。
ACTION_DEVICE_OWNER_CHANGED
此广播不常发送。某些应用需要接收它,以便它们知道设备的安全状态已更改。
ACTION_EVENT_REMINDER
由日历提供程序发送,用于将事件提醒发布到日历应用。由于日历提供程序不知道日历应用是什么,因此此广播必须是隐式的。
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
短信接收应用依赖于这些广播。