Broadcast是什么
广播的特性
广播(Broadcast)用于Android组件之间的灵活通信,它与Activity和Service的区别在于:1、Activity和Service都只能一对一地通信,而Broadcast可以一对多,一人发送广播,多人接收处理;
2、对于发送者来说,广播不需要考虑接收者有没有在工作,接收者有在工作则接收广播,不在工作则丢弃广播;
3、对于接收者来说,会收到各式各样的广播,所以接收者首先要自行过滤符合条件的,然后才能进行解包处理;
4、通常情况下,Activity和Service都是在线程内部通信,而Broadcast既可用于线程内通信,也可用于线程间通信,还能用于进程间通信;
广播的用途
实际开发中,广播一般有以下用途:1、适用于在不同代码文件中操纵对方页面控件的场景,比如说FragmentActivity与Fragment代码间通信,以及Activity与Adapter代码间通信;
2、适用于不同线程之间的通信,虽然线程间通信可使用Thread+Handler、AsyncTask等方式,但是广播的适应面显然更广,Android总线通信框架EventBus就是基于Broadcast来构建的;
3、适用于不同进程之间的通信,既可用于不同APP之间的通信,也可用于系统与APP之间的通信;
Broadcast的调用
广播的调用方法
sendBroadcast : 发送广播registerReceiver : 注册接收器,一般在onStart或者onResume方法中注册
unregisterReceiver : 注销接收器,一般在onStop或者onPause方法中注销
进程内广播与进程间广播
如果广播是在应用之内使用,即不需要跨进程,可以考虑使用LocalBroadcastManager,因为这样更有效率(不需要跨进程通信),而且不用考虑广播开放造成的安全问题(如果其他应用也能收到广播的话)。进程内广播,推荐使用LocalBroadcastManager类下的registerReceiver和unregisterReceiver方法,代码示例如下:
//注册接收器
LocalBroadcastManager.getInstance(this).registerReceiver(guestReceiver, filter);
//注销接收器
LocalBroadcastManager.getInstance(this).unregisterReceiver(guestReceiver);
进程间通讯,推荐使用Context类下的registerReceiver和unregisterReceiver方法,代码示例如下:
//注册接收器,如在activity使用,可去掉mContext,