广播机制简介
- Android中的广播主要分为两种类型:标准广播和有序广播
- 标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出之后所有的广播接收器几乎在同一时间接收到这条广播,因此它们之间没有任何先后顺序可言。这种广播的效率比较高,但同时意味着无法被截断。
- 有序广播则是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接受到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了
接收系统广播
动态注册监听网络变化
- 注册广播有两种方式
- 动态注册:在代码中注册
- 静态注册:在AndroidManifest.xml文件中注册
- 创建广播接收器
- 新建一个类,让它继承自BroadcastReceiver
- 重写父类的onReceive()方法
- 动态注册的广播接收器一定都要取消注册才行
静态注册实现开机启动
- receiver标签:所有静态注册的广播接收器都是在这里进行注册的
发送自定义广播
发送标准广播
- 首先构建出构建出一个Intent对象,并把要发送的广播的值传入
- 然后调用Context的sendBroadcast()方法将广播发送出去
发送有序广播
- 只需调用Context的sendOrderedBroadcast()方法
使用本地广播
- 本地广播:只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用程序发出的广播
- 主要是使用一个LocalBroadcastManager来对广播进行管理,并提供了发送广播和注册广播接收器的方法
- 首先是通过LocalBroadcastManager的getInstance()方法得到它的一个实例
- 然后在注册广播接收器的时候是调用LocalBroadcastManager的registerReceiver()方法
- 使用本地广播的优势
- 可以明确地知道正在发送的广播不会离开我们的程序,因此不需要担心机密数据泄漏的问题
- 其他的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全漏洞的隐患
- 发送本地广播比起发送系统全局广播将会更加高效