EventBus 知识点总结
随着RxJava 的火爆,RxBus 相对来说比较配套,我不知道还会不会用eventBus 但是谁知道呢,总结一下备忘还是不错的选择。
http://greenrobot.org/eventbus/
使用eventBus的好处
EventBus:活动为Android
EventBus是使用Android的开放源码库发布/订阅为松耦合模式。EventBus使得脱钩类与代码,只需几行中央通信-简化了代码,消除依赖关系,并加快应用开发。
使用你的好处EventBus:这...
- 简化组件之间的通信
- 解耦事件发送者和接收者
- 与活动,片段,和后台线程表现良好
- 避免了复杂且容易出错的依赖关系和生命周期问题
- 快; 专为高性能而优化
- 很小(<50K JAR)
- 是在实践中被证明与应用程序安装100,000,000+
- 拥有先进的功能,如交付线程,用户优先级等。
添加:
compile 'org.greenrobot:eventbus:3.0.0'
第1步:定义事件
事件是POJO(简单Java对象)没有任何特殊要求。
public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
2.Prepare subscribers(准备订阅)
// This method will be called when a MessageEvent is posted (in the UI thread for Toast) @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 @Subscribe public void handleSomethingElse(SomeOtherEvent event) { doSomethingWith(event); }
//定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:
//onEvent 它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行
//onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI
//onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么回调函数就在这个子线程执行。
//onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。
3.注册事件 反注册事件
@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!"));