BroadCastReceiver
什么是BroadCastReceiver
BroadCastReceiver是Android四大组件之一,为了方便Android系统各个应用程序及程序内部进行通信,Android系统引入了一套广播机制。各个应用程序可以对感兴趣的广播进行注册,当系统或者其他程序发出这条广播的时候,对发出的广播进行注册的程序便能够收到这条广播,经常用做系统通知。
基本广播类型
- 无序广播
是一种完全异步执行的广播,在广播发出之后,所有的广播接收器会在同一时间接收到这条广播,广播无法被截断。 - 有序广播
是一种同步执行的广播,在广播发出之后,优先级高的广播接收器可以优先接收到这条广播,并可以在优先级较低的广播接收器之前截断停止发送这条广播。
比如有三个广播接收者A, B, C, 优先级是A >B> C。 那这个消息先传给A, 再传给B, 最后传给C。 每个接收者有权终止广播, 比如B终止广播, C就无法接收到。
BroadCastReceiver的注册
- 动态注册: 在代码中进行注册称为动态注册。
动态注册的广播接收器可以自由的控制注册和取消,有很大的灵活性。其广播接收器的注销是在onDestroy()方法中的,所以广播接收器的生命周期是和当前活动的生命周期一样。
步骤如下 :
- 实例化自定义的广播接收器。
- 创建IntentFilter实例。
- 调用IntentFilter实例的addAction()方法添加监听的广播类型。
- 最后调用Context的registerReceiver(BroadcastReceiver,IntentFilter)动态的注册广播。
- 动态注册的广播在活动结束的时候需要取消注册
- 静态注册: 在清单文件中进行注册称为静态注册。
总结:
静态注册的广播不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播。 动态注册的广播接收者当注册的Activity或者Service销毁了那么就接收不到广播了。
BroadCastReceiver生命周期
在Android的广播接收机制中,如果需要接收广播,就需要创建广播接收器。而创建广播接收器的方法就是新建一个类继承自BroadcastReceiver,里面会重写onReceive方法。
- 广播接收器的生命周期非常短暂的, 在接收到广播的时候创建, onReceive()方法结束之后销毁;
- 不要在广播里添加过多逻辑或者进行任何耗时操作。因为在广播中是不允许开辟线程的,当onReceive( )方法运行较长时间(超过10秒)还没有结束的话,那么程序会报错, 弹出Application No Response错误对话框;
- 广播更多的时候扮演的是一个打开其他组件的角色,比如启Service,Notification提示, Activity等;
- 耗时的较长的工作最好放在服务中完成。