eventbus是一种用于Android的事件发布-订阅总栈,简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。
eventBus 官网地址,写的很详细,多阅读阅读可以提高英语水平
http://greenrobot.org/eventbus/
1.首先可以用来线程间通信(顺带回顾一下线程间通信的其他方式,handler,AsyncTask,runOnUiThread)
添加依赖或者放入jar包
compile 'org.greenrobot:eventbus:3.1.1'
我们需要编写一个类用于定义消息类型
public class MessageEvent {
public final String message;
public MessageEvent(String msg) {
this.message = msg;
}
}
接下来正式使用EventBus
第一步,注册
EventBus.getDefault().register(this);
第二步,在子线程中发送消息
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 12; i++) {
if(i==10){
EventBus.getDefault().post(new MessageEvent("update"));
}
}
}
}).start();
第三步,接收消息并处理
@Subscribe(threadMode = ThreadMode.MainThread)//括号里的内容一定要写,不然会报错
void onEventMainThread(MessageEvent event) {
String msg = "onEventMainThread收到了消息+";
Log.d("harvic", event.message);
Toast.makeText(this, event.message, Toast.LENGTH_LONG).show();
}
第四步,取消注册
EventBus.getDefault().unregister(this);
这样就可以了。其实在两个Activity之间跳转传值也是类似用来,只不过发送消息的放在了第二个Activity中。
需要特别注意的是应该先注册后调用post。
https://47.90.63.143/product/taobao?type=product&kw=%E7%8C%AB%E7%B2%AE&apikey=N1qXD2foRnk9N3TkesmxU84Z17cJJT5Ipt6dHNMIzmnbomoRHy35cm6CkwcE9HYX