详解广播机制
5.1 广播机制简介
1、标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序,这种广播效率高,但是无法被截断。
文章图片
2、有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。所以此时的广播接收器是有先后顺序的,优先级高的广播接收器就可以先收到广播消息。并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法收到广播消息了。
文章图片
【详解广播机制】
5.2 接收系统广播
Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或者时区发生改变也会发出一条广播等等。如果想要接收到这些广播,就需要使用广播接收器。
5.2.1 动态注册监听网络变化
注册广播分为两种:
动态注册:在代码中注册。
静态注册:在AndroidManifest.xml中注册。
创建广播:创建一个广播接收器,只需要新建一个类,让它继承自BroadcastReceiver,并重写父类的 onReceive( )方法即可。这样当有广播到来时,onReceive( )方法就会得到执行,具体的逻辑就可以在这个方法中处理。
示例分析:我们在MainActivity中定义了一个内部类NetworkChangeReceiver,这个类是继承自BroadcastReceiver的,并重写了父类的onReceive( )方法,这样每当网络状态发生变化时,onReceive( )方法就会得到执行,这里只是简单地使用Toast提示一段文本信息。我们创建一个IntentFilter的实例,并给它添加一个值为 android.net.conn.CONNECTIVITY_CHANGE 的 action,因为当网络状态发生变化时,系统发出的正是一条值为android.net.conn.CONNECTIVITY_CHANGE 的广播,也就是说我们的广播接收器想要监听什么广播,就在这里添加相应的action。registerReceiver( )方法用于注册将NetworkChangeReceiver的实例和IntentFilter的实例传进去,这样NetworkChangeReceiver就会收到所有值为android.net.conn.CONNECTIVITY_CHANGE的广播,也就实现了监听网络变化的功能。
推荐阅读
- Java|Java OpenCV图像处理之SIFT角点检测详解
- C语言浮点函数中的modf和fmod详解
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- 虚拟DOM-Diff算法详解
- LSTM网络层详解及其应用实例
- OC:|OC: WKWebView详解
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- Vue组件之事件总线和消息发布订阅详解
- JS截取字符串的方法详解
- C语言进阶栈帧示例详解教程