BroadcastReceiver总结

2017-08-29  本文已影响0人  ad9e96e0131b

一、定义

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

二、使用场景

1.同一app内部的同一组件内的消息通信(单个或多个线程之间);

2.同一app内部的不同组件之间的消息通信(单个进程);

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

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

5.Android系统在特定情况下与App之间的消息通信。

三、广播种类

1、普通广播 Normal Broadcast;

优点:完全异步,消息传递效率高,

缺点:不能处理广播传给一个接收者,不能终止广播的传播

2、系统广播 System Broadcas;

3、APP应用内广播 Local Broadcast:只在自身App内传播;

4、有序广播 Ordered Broadcast;

优点:可以根据广播接收者的优先级依次传播,广播接收者可以处理广播然后再传给一下广播接收者,也可以根据需要调用abortBroadcast()终止广播传播。

缺点:效率低

5、粘性广播 Sticky Broadcast.

四、实现广播

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

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

五、内部实现机制

1 自定义广播接收者BroadcastReceiver,并重新onRecvice()方法;

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

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

4 AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,

将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;

5 消息循环执行拿到此广播,回调BroadcastReceiver中的onReveive()方法。

六、LocalBroadcastManager

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

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

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

七、LocalBroadcastManager(源码总结)

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

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

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

转载参考:http://www.cnblogs.com/whoislcj/p/5497409.html

上一篇 下一篇

猜你喜欢

热点阅读