BAT大咖助力Android面试4-Broadcast面试详解
-
- 四,Broadcast面试详解
- 1,广播定义
- 2,广播使用场景
- 3,广播的种类
- 4,广播的注册
- 5,内部实现机制
- 6,LocalBroadcastManager详解
- 四,Broadcast面试详解
四,Broadcast面试详解
1,广播定义
在android中,broadcast是一种广泛运用在应用程序内部或之间传输信息的机制,Android中要发送的广播内容是一个Intent,这个Intent中可以携带我们要传送的数据。
2,广播使用场景
参考自:https://www.cnblogs.com/lwbqqyumidi/p/4168017.html
1.同一app内部的同一组件内的消息通信(单个或多个线程之间);(可用handler解决
)
2.同一app内部的不同组件之间的消息通信(单个进程);(可用EventBus
)
3.同一app具有多个进程的不同组件之间的消息通信;
4.不同app之间的组件之间消息通信;
5.Android系统广播在特定情况下与App之间的消息通信。
后三种常用广播解决
3,广播的种类
参考自:https://blog.csdn.net/carson_ho/article/details/53160580
- 普通广播(Normal Broadcast)
- 系统广播(System Broadcast)
- 有序广播(Ordered Broadcast)
- 粘性广播(Sticky Broadcast)
- App应用内广播(Local Broadcast)
4,广播的注册
参考自:https://blog.csdn.net/u012702547/article/details/46955787
- 静态注册:注册完成就一直运行
- 动态注册:跟随activity的生命周期
5,内部实现机制
(1),自定义广播接收器BroadcastReceiver,并复写onReceive方法
(2),通过Binder机制向AMS(Activity Manager Service
)进行注册
(3),广播发送者通过Binder机制向AMS发送广播
(4),AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到BroadcastReceiver(一般是activity)相应的消息循环队列中
(5),消息循环执行,拿到此广播,回调BroadcastReceiver的onReceive方法
6,LocalBroadcastManager详解
具体说明 https://blog.csdn.net/carson_ho/article/details/53160580
- 高效性,比系统的全局广播更高效
- 安全性,只在自身app内传播,不必担心信息泄露
源码分析
- LocalBroadcastManager高效的原因主要是因为内部是通过Handler发送message实现的,它的sendBroadcast方法含义和我们平时所用的不一样。
- 既然是Handler实现的,所以相比系统广播通过Binder实现更高效,同时使用Handler实现,也使广播控制在应用内部,不会发出去也不会被攻击。
- LocalBroadcastManager内部协作主要是靠这两个Map集合:mReceivers和mActions,当然还有一个List集合mPendingBroadcasts,这个主要是存储待接收的广播对象
更多相关文章
- Android(安卓)监听短信(同时监听广播和数据库)
- Android之入门:多线程更新UI界面
- android WebView的使用详解
- Android(安卓)客服端集成高德定位功能(Android(安卓)studio图文详
- android图形系统详解:View layer
- Android学习之Handler使用小结
- Android(安卓)消息机制学习
- Android服务器推送之GCM
- Unity3D 与Android(安卓)相互传递消息