一.广播
1.定义
在android中,broadcast是一种广泛运用在应用程序之间传输信息的机制,android中我们要发送的广播内容是一个Intent,在这个Intent中可以携带我们要传送的数据,可以变相的将广播理解为观察者模式
2.场景
1>同一个app中具有多个进程的不同组件之间的消息通信,例如在app中有多个进程,
2>不同app之间的组件之间的消息通信
3.种类
1>普通的广播,Normal Broadcast:Context.sendBroadcast,(例如看新闻,张三可以看,李四也可以看,同时看的都是同一个新闻,只要电视播新闻,大家都能一起看)
2>有序广播 System Broadcas:Context.sendOrderedBroadcast(例如中央拨款,先下发到市,市长有权利继续下发,也可以终止,如果终止,那么县长收不到,如果继续下发县长可以收到,但是拨款可以由市长进行改变)
3>本地广播 Local Broadcast,只能在自身App内传播,(例如爸爸给你打钱,只有你知道,别人不会知道)
二.实现广播.receiver
1.静态注册:注册完成后一直执行,做法就是直接将一个receiver写在AndroidManifest中,无论程序销毁还是activity关闭都不会影响广播的接收
2.动态注册:跟随着activity的生命周期,你需要去调用registerreceiver,在activity销毁的时候要调用unregisterreceiver,要不然会引起内存泄漏
三.广播实现机制
1.自定义广播接收者BroadcastReceiver,并复写onReceiver()方法
2.通过binder机制想AMS(activity Manager Service)进行注册
3.广播发送者通过Binder机制向AMS发送广播
4.AMS查找符合相应条件(IntentFilter/Permissiion等)的BroadcasrReceiver,将广播发送到BroadcasrReceiver(一般情况下是Activity)相应的消息循环队列中;
5.选修循环执行拿到此广播,回调BroadcasrReceiver中onReceive()方法
四.LocalBroadcastManager详解
1.使用它发送的广播只能在自身App内传播,因此你不比担心泄露隐私数据
2.其他APP无法对你的APP发送该广播,因为你的app根本就不可能接收到非自身应用发送的该广播,因此你不必担心有安全漏洞可以利用
3.比系统的全局广播更加高效
五.LocalBroadcastManager和系统广播有什么区别
1.LocalBroadcastManager高效的原因主要是因为它内部是通过Handler实现的,它的sendBroadcast(方法含义并非和我们平时所用的一样 ,它的sendBroadcast()方法其实是通过handler发送一个messager实现的
2.既然是它内部是通过handler来实现广播发送的,那么相比与系统广播通过binder实现那肯定是更高效,同时使用Handler来实现,别的应用无法向我们的应用发送该广播,而我们应用内发送的广播也不会离开我们的应用
3.LocalBroadcastManager内部协作主要是靠这两个Map集合:mReceivers和mActions,当然还有一个list集合mPendingBroadcasts,这个主要就是存储待接收的广播对象