Broadcast Receiver(广播接收者)是Android中的一种监听器,用于接收系统或应用发出的广播消息。应用可以通过广播实现跨进程通信。Broadcast Receiver运行在主线程中
发送Broadcast
创建Intent,然后通过发送Broadcast的方法将Intent传递出去,所有符合Intent的组件都将被唤醒。发送Broadcast有两种方式
- sendBroadcast() 发送普通异步广播
- sendOrderedBroadcast() 发送有序广播,即为发出的广播事件定义优先级,优先级高的广播可以修改甚至结束优先级低的广播
注册Broadcast Receiver
使用Broadcast Receiver需要继承BroadcastReceiver类并重写onReceiver()方法。Broadcast Receiver有两种注册方式
-
动态注册 在代码中实例化一个Broadcast Receiver对象
- 使用动态方式注册广播接收器,官方建议是在onResume()回调函数中调用registerReceiver()注册,在onPause()回调函数中调用unregisterReceiver()函数注销;如果在onStart()回调函数中注册的话,就要在onStop()回调函数中解除注册
- 动态注册的广播一定要解除注册,否则当注册的上下文对象被销毁时,会出现异常
-
静态注册 在Manifest中注册Broadcast Receiver对象
- 使用静态方式注册的广播接收器在应用被关闭时仍然可以被对应的广播事件唤醒,进而处理相应的事件
动态注册的Broadcast Receiver隐藏在代码中,不方便管理;所以推荐使用静态注册的方式
Receiver可以接收多个Intent并处理,onReceiver()每次接收Intent都会生成一个新的Receiver对象,函数结束后就销毁该对象
生命周期
Broadcast Receiver的生命周期从调用onReceiver()方法开始,到结束为止。因为生命周期比较短暂,所以不适合处理复杂逻辑(包括弹出对话框等待用户点击)。如果需要复杂事件处理,可以将Intent对象通过startService()传递给Service,并开辟子线程操作
参考资料
Android开发之BroadcastReceiver详解
Android 中的BroadCastReceiverAndroid Broadcast Security