Android的广播机制,在实际应用的也是常客,这边博客将和大家一起分享有关于Android广播的这些事。
什么是广播?
广播是一个全局监听器,属于Android四大组件之一,分为广播接收者和广播发送者。
广播有什么作用?
通用用来接收系统或者应用发送的消息,并作出响应
广播有哪些应用场景?
进程间通信、多线程通信、App内部通信、与系统的通信等等
Android是如何实现的广播的?
首先广播采用观察者模式,不熟悉观察者模式的小伙伴可以先看看观察者模式,使用观察者模式的好处是使发送者和观察者解耦,方便拓展。
在广播机制中,主要有三个角色,分别是消息订阅者(广播发送者)、消息发布者(广播发布者)和消息中心(AMS:ActivityManagerService)
一个完整的广播流程可以分为五步:
第一步:广播接收者,通过Binder机制在AMS注册
第二步:广播发送者,通过Binder机制向AMS发送广播
第三步:AMS根据广播发送者的要求,在自己的注册列表中,寻找合适的广播接收者(IntentFilter/Permission)
第四步:AMS将广播发送到合适的广播接收者相应的消息循环列表中
第五步:广播接收者通过消息循环拿到此广播,并回调onRecive()
这里需要注意的是,广播放送者和广播接收者的执行是异步的,即广播发送者不会关心有无接收者,同时也不确定接收者何时才能收到广播
代码实现
1.接收
继承BroadcastRecieve基类以及重写onRecive方法
在收到广播后,会回调onRecive方法,一般情况下,onRecive方法会涉及与其他组件之间的交互,如发送Notification、启动Service等,而且广播接收器运行在UI线程,所以不能执行耗时操作,以免触发ARN
示例代码
// 继承BroadcastReceivre基类
public class mBroadcastReceiver extends BroadcastReceiver {
// 复写onReceive()方法
// 接收到广播后,则自动调用该方法
@Override
public void onReceive(Context context, Intent intent) {
//写入接收广播后的操作
}
}
2.注册
注册方式分为静态注册和动态注册两种
需要注意的是,大部分静态注册在8.0以后是不能使用的,但是为了知识的完整性,这里还是会介绍静态注册的方法,关于静态注册的变更,可以查看文档