EventBus 的用法

前言

Demo 地址
关于 EventBus 笔者将分两篇文章进行介绍。

  • EventBus 的用法

  • EventBus 的源码分析

什么是 EventBus 及优点

  • 简化组件之间的通信

    • 减弱事件发送者和接受者之间的耦合

    • 使 Activity 、Fragment 和后台线程很好的进行消息传递

    • 避免和生命周期之间复杂和易错的依赖关系。

  • 使代码更加简洁

  • 效率更高

  • 轻量级(jar 包小于 50K) 等等

EventBus 的用法

引入 EventBus

首先去这里先下载 EventBus,然后导入你的项目里

新建一个类 MyEvent

    public class MyEvent {

      int id;
      String msg;

      public int getId() {
        return id;
      }

      public void setId(int id) {
        this.id = id;
      }

      public String getMsg() {
        return msg;
      }

      public void setMsg(String msg) {
        this.msg = msg;
      }

    }

注册 EventBus

在需要接受消息的页面调用如下方法注册 EventBus,可以在 Activity 或者 Fragment 的 onCreate 方法里调用。在 onDestroy 方法中解注册。

     @Override protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      EventBus.getDefault().register(this);//注册 EventBus
    }


    @Override protected void onDestroy() {
      super.onDestroy();
      EventBus.getDefault().unregister(this);
    }

发送消息

在需要发送消息的地方使用 EventBus 的 post 方法发送消息,这里的消息就是新建的类 MyEvent 的对象。

    public void onClick(View view) {
      MyEvent myEvent = new MyEvent();
      myEvent.setId(1);
      myEvent.setMsg("This is from SecondActivity");
      EventBus.getDefault().post(myEvent);
    }

接受消息

在需要接受消息的页面写一个方法 onEvent ,并使用 Subscribe 注解标记此方法是 EventBus 接受消息的方法

    @Subscribe(threadMode = ThreadMode.MAIN) //标注此方法是 EventBus 接受消息的方法
    public void onEvent(MyEvent myEvent){
      Log.i(Tag,"MainActivity"+myEvent.getId()+"==="+myEvent.getMsg()+"==Thread="+Thread.currentThread());
    }

Subscribe 注解有一个枚举类型的属性 threadMode ,它有四个值,默认值是 ThreadMode.POSTING。

  • ThreadMode.POSTING — 消息是从哪个线程里发送来的,接受消息的方法将会在和发送消息相同的线程里执行

  • ThreadMode.MAIN — 无论消息是否是从 mian 线程里发送来的,接受消息的方法都在 main 线程中执行

  • ThreadMode.BACKGROUND — 如果消息是从 main 线程中发送来的,将启动一个新的线程执行接受消息的方法,如果不是从 main 线程发送来的,接受消息的方法将在和发送消息相同的线程里执行

  • ThreadMode.ASYNC — 无论消息是从哪个线程里发送来的,都将启动新的子线程执行接受消息的方法。

结语

至此,EventBus 的用法已经介绍完,下篇将从源码分析 EventBus。

你可能感兴趣的:(Android)