受 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 有关的事件,除了为广播进行注册,目前还没有很好的替代方法。
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_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
短信接收者应用需要依赖这些广播。