详解EventBus 3。x的快速使用

  

EventBus可以很方便地进行各组件间的通信、解耦性更强,比广播更好用。
  

  

<强> EventBus 3简介

  

EventBus是一种为了优化Android组件之间事件传递的解耦工具,通过发布/订阅事件总线来实现事件在不同组件之间的事件传递。
  

  

在EventBus 3之前,greenrobot团队因为考虑性能原因所以比较抵触使用注解框架。目前的EventBus3开始使用注解来申明订阅事件的处理方法,虽然目前Android 6和艺术都有了,但是对于Java反射造成的性能影响还是没能很好的解决。
  

  

在EventBus3中,greenrobot团队通过利用在编译时检索所有注解代码,然后生成一个包含所有在运行时要花很大代价才能获取的数据的类,通过这种新的注解处理方式来提升性能,让EventBus3比其他的eventbus会更加快。在后文中会贴出和奥托的性能比较。

  

<强> EventBus 3和EventBus 2。x的区别

  

<强>回调方法改动

  

由于API的改动,会导致EventBus3和之前使用老版本的EventBus不兼容,因为之前版本(EventBus 2. x),在注册完事件之后,会要求写相应>   eventBus=EventBus.builder () .sendNoSubscriberEvent(假)   .sendSubscriberExceptionEvent(假)   .throwSubscriberException (BuildConfig.DEBUG)//只有在调试模式下,会抛出错误异常    .build ();      

以上代码使用Builder设计模式,来构建返回一个eventBus实例。在调试阶段,可以在程序出现异常时直接崩溃发现错误。
  

  

<强>快速使用

  

1。编译

        编译“org.greenrobot: eventbus: 3.1.1”      

2。自定义事件类

        公开课MessageEvent {//成员变量根据自己的需求创建   私人int类型;//通过构造方法传递数据   公共MessageEvent (int类型){   这一点。类型=类型;   }      公共int方法(){   返回类型;   }      公共空间setType (int类型){   这一点。类型=类型;   }   }      

3。注册事件与解除注册

  

一般来说,在>   @Override   保护空白>   @Override   保护空白>   EventBus.getDefault()。邮报》(新MessageEvent(类型));      

5。接收与处理事件

     /* *   * @Subscribe注解必须要写,线程需要指定   *方法名可随意   */@Subscribe (threadMode=ThreadMode.MAIN)   公共空间onMessageEvent (MessageEvent事件){   开关(event.getType ()) {//做你的事情   }   }   之前      

上面提到了线程模型,它一共有5种:

  
      <李>发布(默认):事件处理方法的线程跟发布事件的线程是同一个线程;李   <李>主要:在Android中,事件处理方法在主线程(UI线程)中调用,不能进行耗时操作,李   <李> MAIN_ORDERED:在Android中,事件处理方法在主线程(UI线程)中调用。与主要不同的是,该事件将始终排队等待发布,这确保了事件发布不会被阻塞;李   <李>背景:在Android中,事件处理方法在后台线程中调用,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程;李   <李>异步:无论事件发布的线程是哪一个,事件处理方法始终会新建一个子线程运行,不能进行UI操作。   
  

以上便是EventBus的最基本的使用,是不是很方便呢。希望对大家的学习有所帮助,也希望大家多多支持。

详解EventBus 3。x的快速使用