美文网首页
BroadcastReceiver总结

BroadcastReceiver总结

作者: ad9e96e0131b | 来源:发表于2017-08-29 00:46 被阅读0次

    一、定义

    在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

    相关文章

      网友评论

          本文标题:BroadcastReceiver总结

          本文链接:https://www.haomeiwen.com/subject/vaendxtx.html