BroadcastReciver的分类与工作原理
时间: 2024-04-18 17:23:49 浏览: 70
BroadcastReceiver 最好作为内部类
BroadcastReceiver 可以分为两类:普通广播(Normal Broadcast)和有序广播(Ordered Broadcast)。
1. 普通广播(Normal Broadcast):
普通广播是一种完全异步的广播方式,BroadcastReceiver 接收到广播后,会以并发的方式将广播消息发送给所有匹配的 BroadcastReceiver,各个接收者之间没有先后顺序,无法拦截或修改广播。这种广播方式适用于不需要有序处理的场景,比如向多个组件发送通知等。
2. 有序广播(Ordered Broadcast):
有序广播是一种按照优先级顺序依次传递的广播方式,BroadcastReceiver 接收到广播后,可以中断广播或者修改广播内容,然后将广播继续传递给下一个接收者。有序广播通过 setPriority() 方法设置接收者的优先级,优先级高的接收者会先接收到广播。这种广播方式适用于需要有序处理的场景,比如短信拦截、系统事件处理等。
BroadcastReceiver 的工作原理如下:
1. 当发送一个广播时,系统会将广播消息封装为 Intent 对象。
2. 系统会根据 Intent 的 action 和 category 来匹配符合条件的 BroadcastReceiver。
3. 对于普通广播,系统会并发地将广播消息发送给所有匹配的 BroadcastReceiver,各个接收者之间没有先后顺序。
4. 对于有序广播,系统会按照优先级顺序依次传递广播消息给 BroadcastReceiver,每个接收者都可以中断广播或者修改广播内容,然后将广播继续传递给下一个接收者。
5. 广播的最终接收者可以通过 setResult() 方法设置结果代码,并通过 getResultExtras() 方法获取结果数据。
6. 广播接收完成后,系统会自动回收不再需要的资源。
需要注意的是,BroadcastReceiver 的处理时间应尽量控制在几秒钟以内,避免影响用户体验。同时,为了保护用户隐私和安全,Android 8.0(API 级别 26)以上的版本对隐式广播进行了限制,只能通过动态注册的方式接收隐式广播。
阅读全文