EventBus 知识点总结

随着RxJava 的火爆,RxBus 相对来说比较配套,我不知道还会不会用eventBus 但是谁知道呢,总结一下备忘还是不错的选择。

http://greenrobot.org/eventbus/

  EventBus-Android的发布 - 订阅

使用eventBus的好处

EventBus:活动为Android

EventBus是使用Android的开放源码库发布/订阅为松耦合模式。EventBus使得脱钩类与代码,只需几行中央通信-简化了代码,消除依赖关系,并加快应用开发。
EventBus-Android的发布 - 订阅

使用你的好处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!"));

 

 
posted @ 2016-09-28 00:05  ClodThunder  阅读(246)  评论(0编辑  收藏  举报