ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
### Broadcast Receiver #### 1、广播有几种形式 ? 都有什么特点 ? > * 参考回答: > * 普通广播:开发者自身定义 intent的广播(最常用),所有的广播接收器几乎会在同一时刻接受到此广播信息,**接受的先后顺序随机**; > * 有序广播:发送出去的广播被广播接收者**按照先后顺序接收**,,同步执行的广播,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递,且优先级(priority)高的广播接收器会先收到广播消息,属性相同时,动态注册的广播优先。**有序广播可以被接收器截断使得后面的接收器无法收到它;先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播**。 > * 本地广播:仅在自己的应用内发送接收广播,也就是只有自己的应用能收到,数据更加安全,效率更高,但只能采用**动态注册**的方式; > * 粘性广播:这种广播会**一直滞留**,当有匹配该广播的接收器被注册后,该接收器就会收到此条广播;由于在Android5.0 & API 21中已经失效,所以不建议使用。 > * 推荐文章: > * [Android四大组件:BroadcastReceiver史上最全面解析](https://www.jianshu.com/p/ca3d87a4cdf3) > * 广播接收者原理解析 ![](https://img.kancloud.cn/e5/c2/e5c2aab5425bfd29eb4d009e2f6e3d54_830x385.jpg) #### 2、广播接收者的两种注册方式 ? > * 参考回答: > ![](https://img.kancloud.cn/47/34/4734b228417bbe66414ecdd994f6f8d5_1025x240.jpg) >[success]注意: 在Android8.0系统之后,所有隐式广播都不允许使用静态注册的方式来接收了。隐式广播指的是那些没有具体制定发送给哪个应用程序的广播,大多数系统广播属于隐式广播,但是极少数特殊的系统广播目前仍然允许使用静态注册的方式来接收。详见——[隐式广播例外情况](https://developer.android.google.cn/guide/components/broadcast-exceptions) #### 3、广播发送和接收的原理了解吗 ?(Binder机制、AMS) > * 参考回答: > * 广播队列传送广播给Receiver的原理其实就是将BroadcastReceiver和消息都放到BroadcastRecord里面,然后通过Handler机制遍历BroadcastQueue里面的BroadcastRecord,将消息发送给BroadcastReceiver: > * ![](https://img.kancloud.cn/70/b3/70b3782d38633b37f3103f6533908587_844x266.jpg) > * 所以整个广播的机制可以总结成下面这张图: > ![](https://img.kancloud.cn/92/99/9299517048ede4df87b8300279e1e068_576x386.jpg) > > * 推荐文章: > * [广播的底层实现原理](https://www.jianshu.com/p/02085150339c)