美文网首页工作生活
关于Broadcast Receiver的知识点

关于Broadcast Receiver的知识点

作者: 纸狒 | 来源:发表于2019-07-05 08:16 被阅读0次

    一,广播

    二,实现广播

    三,广播实现机制

    四,LoacalBroadcastManager详解


                                                           一,广播

    1,广播定义:类似观察者模式

    2,广播场景

    3,广播种类


    1,定义: 

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

        可以让Service发广播到接收者。

    2,使用场景:

    A: 同个App具有多个进程的不同组件之间的消息通信

    B:不同App之间的组件之间的消息通信

    3,种类

    1)Normal Broadcast:Context.sendBroadcast(),该广播是未定义顺序的,异步的

    2)System Broadcast:Context:sendOrdered Broadcast:有序的

    3)Local Broadcast:只在app内传播


                                          二,实现广播receiver

    1,静态注册:注册完成就一直运行(写在mainfest中,activity被销毁或者app被杀死的时候,还能收到广播)

    2,动态注册:跟随activity的生命周期(代码中进行注册和解绑)


                                          三,内部实现机制

    1,自定义广播接收者BroadcastReceiver,并复写onRecvice();

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

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

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

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


    四,localBroadcastManager详解

    1,使用它发送的广播将只在app内部传输,因此不必担心泄露隐私数据

    2,其他app无法对你的app发送该挂广播,因此你的app根本不可能接收到非自身应用发送的该广播,因此你不必担心有它会泄露可以利用

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


    从源码的角度看,广播用的是单例管理

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

    2,既然是它内部通过Handler来实现广播的发送的,那么相比与系统广播通过Binder实现,那肯定是更加高效的。

        同时使用Handler实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用。

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

    相关文章

      网友评论

        本文标题:关于Broadcast Receiver的知识点

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