github:https://github.com/greenrobot/EventBus
app依赖库:compile 'org.greenrobot:eventbus:3.0.0'
一、概述
因为EventBus3.0.0跟以前的版本使用方法略有不同,所以在这记录一下。
二、了解及使用
1、定义一个消息类
public class OneEventBean {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2、在需要接收消息的界面注册
EventBus
EventBus.getDefault().register(this);
3、在接收消息界面写一个接收的函数(
可以自定义函数名),但是这个地方需要加上
@Subscribe标签(必须加上,EventBus3.0.0内部根据它来识别所需要调用的方法)
@Subscribe(threadMode = ThreadMode.POSTING)
public void onEventMainThread(OneEventBean busBean) {
String msg = busBean.getMsg();
Log.i("TAG", "busBean.getMsg()==" + msg);
et.setText(busBean.getMsg());
Toast.makeText(this, busBean.getMsg(), Toast.LENGTH_SHORT).show();
}
@Subscribe标签参数说明:
- ThreadMode.POSTING:默认方式,该事件在哪个线程发送出来的,就会在那个线程中运行,也就是说发送事件和接收事件线程在同一个线程(尽量不要在其中做耗时操作);
- ThreadMode.MAIN:不管事件是在哪个线程中发送出来的,都会在UI线程中执行,接收事件就会在UI线程中运行(类似Handler);
- ThreadMode.BACKGROUND:如果事件是在UI线程中发送出来的,那么就会在子线程中运行,如果事件本来就是子线程中发送出来的,则直接在该子线程中执行;
- ThreadMode.ASYNC:无论事件在哪个线程发送,都会创建新的子线程在执行。
4、在需要发送消息的界面发送消息
OneEventBean oneEventBean = new OneEventBean();
oneEventBean.setMsg("测试EventBus-----------+++++++-");
EventBus.getDefault().post(oneEventBean);
5、在需要接收消息的界面注销
EventBus(不要忘掉哦)
EventBus.getDefault().unregister(this);