BAT大咖助力Android面试4-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,这个主要是存储待接收的广播对象

猜你喜欢

转载自blog.csdn.net/superjunjin/article/details/80180457
今日推荐