EventBus总结

EventBus

  • Less code, better quality.
    与otto对比

  • EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

优缺点

  • 完全解耦了请求链之间的关系,避免了请求者被长持有,
  • 又比广播更轻量,比LocalBroadcast则更强大,
  • 接口简单实用,集成方便
  • 简化代码
  • 各种Event的定义工作量大。
  • 限定了方法名(3.0已经可以自定义)

用法参考这里这里

  • 在Gradle脚本中添加 EventBus 依赖 compile 'org.greenrobot:event:3.0.0'
  • 定义events
public class MessageEvent {
    public final String message;

    public MessageEvent(String message) {
        this.message = message;
    }
}
  • 准备订阅者 订阅者需要实现event接收方法,当event被post时被调用。该方法由注解关键字 @Subscrib 来定义。自从EventBus3.0开始,该方法名称可以自由规定(去掉了2.0版本的定义约束)
// 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);
}
  • 订阅者们(Subscribers)需要注册以及接触注册它们自己到总线Bus。只有订阅者被注册之后,它们才回收到事件(Events)通知。在Android中,Activities和Fragments通常根据它们的生命周期来绑定。
@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}
@Override
public void onStop() {
   EventBus.getDefault().unregister(this);
    super.onStop();
}
  • 发送事件 从你的代码中任何位置发送事件,所有当前注册过的订阅者,只要事件类型匹配都能收到。
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

源码分析参考这里

参考文章列表

EventBus 3.0的用法详解(一)

posted @ 2016-07-18 14:54  Live and Learn  阅读(1098)  评论(0编辑  收藏  举报