Broadcast Receiver面试详解

2017-12-02  本文已影响0人  xiaolong20

一.广播

1.广播定义

在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。

2.广播场景

A.同一个app具有多个进程的不同组件之间的消息通信

B.不同app之间的组件之间消息通信

3.广播种类

1)Normal Broadcast:Context.sendBroadcast

2)System Broadcast:Context.sendOrderedBroadcast

3)Local Broadcast:只在自身App内传播

二.实现广播-receiver

1.静态注册:注册完成就一直运行

2.动态注册:跟随activity的生命周期

三.广播实现机制

1.自定义广播接受者BroadcastReceiver,并重写onReceive方法

2.通过Binder机制向AMS(Activity Manager Service)进行注册

3.广播发送者通过Binder机制向AMS发送广播

4.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中

5.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive方法

四.LocalBroadcastManager详解

1.使用它发送的广播将只在自身App内传播,因此你不必担心泄漏隐私数据

2.其它App无法对你的App发送该广播,因为你的App根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用

3.比系统的全局广播更加高效

1.LocalBroadcastManager高效的原因主要是因为他内部通过Handler实现的,它的sendBroadcast方法含义并非我们平时所用的一样,它的sendBroadcast其实是通过handler发送一个Message实现的

2.既然它内部是通过Handler来实现广播发送的,那么相比系统广播通过Binder实现可定是更高效了,同时使用Handler来实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用

3.LocalBroadcastManager内部协作主要是靠这两个Map集合:mReceivers和mActions,当然还有一个List集合mPendingBroadcasts,这个主要就是存储待接收的广播对象

上一篇 下一篇

猜你喜欢

热点阅读