最近, 公司开启了一个新项目. 所以, 以前没用到的新知识, 这次也可以拿来试用一下了=.=!. 这篇博客主要是翻译一下GreenRobot官网上的EventBus的基础用法, 以及标签属性的代表含义. 本文末尾会有EventBus的官网地址以及GitHub地址.
EventBus的特征 :
EventBus的使用步骤 :
步骤1 : Android Studio 配置 EventBus
compile 'org.greenrobot:eventbus:3.0.0'
步骤2 : 定义事件
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
步骤3 : 创建观察者
// This method will be called when a MessageEvent is posted (in the UI thread for Toast)
// 当MessageEvent被当做参数发送的时候这个方法将会被触发.
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
// This method will be called when a SomeOtherEvent is posted
// 当SomeOtherEvent被当做参数发送的时候这个方法将会被触发.
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
doSomethingWith(event);
}
并且在Activity或者Fragment生命周期中绑定和取消绑定监听
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
步骤4 : 发送广播
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
大致的流程就是 : Activity/Fragment 绑定监听. –> 然后, 利用@Subscribe标签创建订阅事件. –> 最后, 利用发送广播事件的参数(MessageEvent)的不同去寻找含有对应参数的订阅方法(public void onMessageEvent(MessageEvent event))并执行.这里面对应的参数就是MessageEvent.
主要流程梳理完了, 下面我们就来看看, @Subscribe订阅标签都包含哪些内容吧.
1. @Subscribe : 默认写法, 订阅者与发布者在相同线程.
2. @Subscribe(threadMode = ThreadMode.POSTING) : 默认写法的复杂形势
3. @Subscribe(threadMode = ThreadMode.MAIN) : 订阅者将会在Android UI线程被调用.
4. @Subscribe(threadMode = ThreadMode.BACKGROUND) : 如果发布者线程不是UI线程的话, 订阅者线程将与发布者为相同线程. 如果发布者为主线程, 订阅者将会开启一个后台线程, 并加入到线程池中按顺序执行. 注 : 使用此模式的事件处理程序应尽量快速返回,以避免阻塞后台线程.
5. @Subscribe(threadMode = ThreadMode.ASYNC) : 订阅者在后台线程被调用.
EventBus 初探 就这些了, 博客写的不好, 有的地方用词会不清晰, 希望大家留言指出 ^_^!
参考文献
EventBus For Android
EventBus GitHub