EventBus是一个开源的事件总线框架,可方便的实现事件消息的收发,可方便的替代handler,asyc等,实现程序的解耦合。
EventBus github地址:https://github.com/greenrobot/EventBus
Eventbus 官方网址:http://greenrobot.org/eventbus/
compile 'org.greenrobot:eventbus:3.0.0'
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
//注册
EventBus.getDefault().register(this);
//注销
EventBus.getDefault().unregister(this);
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Subscribe
public void onMessageEvent(MessageEvent event){
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
对于处理函数可以分为四种不同的处理模式ThreadMode:
@Subscribe(threadMode = ThreadMode.POSTING) // ThreadMode is optional here
public void onMessage(MessageEvent event) {
log(event.message);
}
处理函数运行在当前线程里,如果当前线程时UI线程,则运行在UI线程中。
// Called in Android UI's main thread
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent event) {
textField.setText(event.message);
}
处理函数运行在UI线程(主线程)中,通常用于更新页面。
// Called in the background thread
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event){
saveToDisk(event.message);
}
处理函数在后台运行,如果当前线程不是主线程(UI线程)则处理在当前线程中运行,如果当前线程是UI(主线程)时,则开辟一个新的线程处理相应操作。
// Called in a separate thread
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event){
backend.send(event.message);
}
处理函数直接开辟新的线程处理相应操作。
@Subscribe(priority = 1,threadMode = ThreadMode.BACKGROUND)
public void onEdThread(MessageEvent event) {
System.out.println("onEdThread 2 :" + event.message);
}
对于消息的发送可在注册的类中任意发送
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
EventBus的简单应用就是这样,真的是一个非常方便好使的消息处理框架。