工作生活

关于Broadcast Receiver的知识点

2019-07-05  本文已影响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这个主要就是在存储待接收的广播对象

上一篇下一篇

猜你喜欢

热点阅读