1.简介
EventBus是一个Android 端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信,比如请求网络,等网络返回时通过Handler或Broadcast通过UI,两个Fragmet之间需要通过Listener通信,这些需求都可以通过EventBus实现。
2.下载地址
https://github.com/greenrobot/EventBus
3.使用步骤
1.添加 jar包到libs文件夹下
2.注册 EventBus.getDefault().register(this);
3.解注册 EventBus.getDefault().unregister(this);
4.构造发送消息类:
public class MessageEvent{
public String name;
public String password;
public MessageEvent(String name,String password){
this.name = name;
this.password = password;
}
}
5.发布消息 EventBus.getDefault().post(New MessageEvent("发送的消息""));
6.接收消息
*定义的接收方法 (接收方法 自定义名称) 接收的类型的类型 必须和 发送消息的类型一致 (类似与 广播的接收频道 必须一致)
*需要在定义的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN) 此处的其它注解方法如下:
ThreadMode.MAIN 表示这个方法在主线程中执行
ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理
ThreadMode.ASYNC 表示在后台执行,可以异步并发处理
ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行
*以上方法的使用,是需要先注册 register,再 post 才能接收到消息;
如果使用 postSticky发送事件,那么可以不需要注册,也能接收到消息;
4.粘性事件
1.构造发送消息类
public class MessageEvent{
public String name;
public String password;
public MessageEvent(String name,String password){
this.name = name;
this.password = password;
}
}
2.发送消息 EventBus.getDefault().postSticky(new StickyEvent("该处是粘性事件"));
3.接收消息
*定义的接收方法(接收方法 自定义名称) 接收的类型 必须和 发送消息的类型一致 (类似与 广播的接收频道 必须一致)
*需要在定义的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
此处的其它注解方法如下:
ThreadMode.MAIN 表示这个方法在主线程中执行
ThreadMode.BACKGROUND 表示该方法在后台执行,不能并发处理
ThreadMode.ASYNC 表示在后台执行,可以异步并发处理
ThreadMode.POSTING 表示该方法和消息发送方在同一个线程中执行
4.注册 EventBus.getDefault().register(MainActivity.this);
5.解注册
*该方法在 onDestory() 中调用
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(MainActivity.this);
5.例子
1.主线程发送消息
2.发送粘性事件
网友评论