广播
实现广播-receiver
广播实现机制
LocatBroadcastManager详解
1、广播定义
在Android,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。
类似观察者模式
2、广播的场景
1)同一app具有多个进程的不同组件之间的消息通信
2)不同app之间的组件之间消息通信
3、广播的种类
1)普通广播:Normal Broadcast:Context.sendBroadcast
2)有序广播: System Broadcast:Context.sendOrderedBroadcast
3)本地广播: Local Broadcast:只在自身app内传播
4、实现广播接收器
1)静态注册:静态注册的广播,即使Activity销毁了,仍然可以收到广播。更牛掰的是即使杀死进程,仍然可以收到广播
2)动态注册:跟随activity的生命周期,需要手动注册,在onDestory中需要取消注册,否则会引起内存泄露
5、内部实现机制【应该重视】
1)自定义BroadcastReceiver,并复写onRecvice()方法
2)通过Binder机制向AMS(Activity Manager Service)进行注册;
3)广播发送是通过Binder机制向AMS发送广播
4)AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中
5)消息循环执行拿到此广播,回调BroadcastReceiver中的onReceive()方法
6、LocalBroadcastManager详解
1)使用它发送的广播将只在自身APP内传播,因此你不必担心泄露隐私数据
2)其他APP不能对你的APP发送该广播,因此你的APP根本不可能接受到非自身应用发送的该广播,因此你不必担心有安全泄露可以利用
3)比系统的全局广播更加高效
【万一别人知道全局Action,就可能收到,或者发送消息到你的应用】
高效原因:
1)LocalBroadcastManager高效的原因主要时因为它内部是通过Handler实现的,它的sendBroadcast()方法的含义和我们平时所用的不一样,它的sendBroadcast()方法其实是通过handler发送一个Message实现的
2)既然它内部是通过Handler来实现广播的发送的,那么相比与系统广播通过Binder实现那肯定是更高效了,同时使用Handler来实现,别的应用无法向我们的应用发送广播,而我们应用内发送的广播也不会离开我们的应用
3)LocalBroadcastManager内部协作主要是靠这两个Map集合:mReceivers和mActions,当然还有一个List集合mPendingBroadcasts,这个主要是存储待接受的广播对象
网友评论