使用详解以及各版本的一些区别, 在了解版本区别之前先简单了解一下。

EventBus文档 http://greenrobot.org/eventbus/documentation

EventBus源码 https://github.com/greenrobot/EventBus

EventBus是什么?

EventBus是一种发布者和订阅者的事件分发模式。可以这么理解,比如我们订阅的Android Weekly,每当星期一0点这个时候,Android WeekLy公司,都会以邮件的形式通知我们。

目前有多个库都开发了这样的功能。它有以下的优点:

  • 方法库较小
  • 便于集成
  • 使用简单

我们为什么要使用EventBus?

EventBus是彻底解耦的观察者模式。我们常常用在对象一对多的情况,使一个对象发生改变的时候,所有依赖的对象能够得到通知并更新。 比如我们在实际的开发中,当用户登录了,我们多个页面需要根据登录后的信息更改页面UI。这时,登录界面就是发布者,而其他的页面就是订阅者。它 们都在订阅用户信息变化的消息。 再比如我们的Fragment间的通信。

EventBus 1.0.5.1:

   implementation 'org.simple:androideventbus:1.0.5.1'
复制代码

使用:

注意:官方是推荐将注册写到onStart,将注销写到onStop中,当然你也可以跟具自己的需求来改变的。

sticky 在注册期间,所有粘性订户方法将立即获得之前发布的粘性事件。
我在项目中碰到一个小问题就是我在A 界面发送一个粘性事件 在B 界面接受,如果 控件还未初始化完成,EventBus就已经注册了,那么在监听方法中的控件就未初始化,使用时也就为空。

   @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);EventBus.getDefault().register(this);initView();}
复制代码

1.注册onCreate()中:

    EventBus.getDefault().register(this);
复制代码

2.解除注册onDestroy方法:

    EventBus.getDefault().unregister(this);
复制代码

3.监听(自定义方法即可,1.0是根据@Subscriber(tag=“resultData”)):

    @Subscriber(tag = "resultData")  public void resultData(String data)   {   TextView.setText(data);   }
复制代码

4.发布事件 :

EventBus.getDefault().post(string,“resultData”);
复制代码

EventBus 2.4.1:

   implementation'de.greenrobot:eventbus:2.4.1'
复制代码

使用:
1.注册onCreate()中:

    EventBus.getDefault().register(this);
复制代码

2.解除注册onDestroy方法:

    EventBus.getDefault().unregister(this);
复制代码

3.新建event类 :

    public class MainEvent {private String message;public MainEvent(String message) {this.message = message;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
复制代码
  1. 监听:
    必须重写约定好的方法。
    EventBus 在3.0.0版本以下的接收事件方法都是在约定好的方法进行接收。EventBus提供了以下几个方法进行接收事件:
    onEvent() :执行在发送事件的线程。
    onEventMainThread 代表这个方法会在UI线程执行。
    onEventPostThread :代表这个方法会在当前发布事件的线程执行。
    onEventBackgroundThread :事件处理是在后台线程,但事件处理时间还是不应该太长, 因为如果发送事件的线程是后台线程,会直接执行事件, 如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件, 如果某个事件处理时间太长,会阻塞后面的事件的派发或处理。
    onEventAsync :每个事件会开启一个线程(有线程池),但最好限制线程的数目 。
      public void onEvent(MainEvent event) {if (TextUtils.isEmpty(event.getName()))return;Toast.makeText(this, event.getName(), Toast.LENGTH_SHORT).show();}
复制代码
  1. 发布事件:
  EventBus.getDefault().post(new MainEvent("Hello everyone"));
复制代码

EventBus 3.1.1:

implementation 'org.greenrobot:eventbus:3.1.1'
复制代码

使用:

  1. 注册onCreate()中:
    EventBus.getDefault().register(this);
复制代码
  1. 解除注册onDestroy方法:
    EventBus.getDefault().unregister(this);
复制代码
  1. 新建event类 :

  2. 监听:

    threadMode指线程模式, priority指事件的优先级, sticky是否为粘性事件

    threadMode 就是旧版本接收信息运行的方法:

    1. NAIN UI主线程
    2. BACKGROUND 后台线程
    3. POSTING 和发布者处在同一个线程(默认)
    4. ASYNC 异步线程

    priority 其实和Boardcast接收者的优先级差不多,数越大优先级越高,一般0-100。默认为0

    sticky 在注册期间,所有粘性订户方法将立即获得之前发布的粘性事件

    @Subscribepublic void getEventBus(RegisterEvent event){(...)}@Subscribe(threadMode = ThreadMode.POSTING, priority = 2, sticky = true)    public void getEventBus(RegisterEvent event){(...)}
复制代码
  1. 发布事件:
     //发布普通事件EventBus.getDefault().post(new RegisterEvent());//发布粘性事件EventBus.getDefault().postSticky(new RegisterEvent());
复制代码
  1. 移除粘性事件:
     //移除粘性事件EventBus.getDefault().removeStickyEvent(new RegisterEvent());//移除所有粘性事件EventBus.getDefault().removeAllStickyEvents();
复制代码

EventBus优缺点:

优点:插件大小合适,仅54K ,
简化组件之间的通信方式,实现解耦让业务代码更加简洁,可以动态设置事件处理线程以及优先级

缺点:每个事件都必须自定义一个事件类,造成事件类太多,无形中加大了维护成本

EventBus 3.1.1与2.4.1的区别 :

代码更加简洁: EventBus 2.4.1 必须定义以onEvent开头的几个方法,代码中语境比较突兀,且有可能会导致拼写错误
EventBus 3.1.1 函数名字不再受到权限,而且可以在一个函数中体现出在哪个线程执行,并且可指定接收事件的优先级。

性能 :
EventBus 2采用反射的方式对整个注册的类的所有方法进行扫描来完成注册,会有性能上的影响。

EventBus 3中EventBus提供了EventBusAnnotationProcessor注解处理器来在编译期通过读取@Subscribe()注解并解析、处理其中所包含的信息,然后生成java类来保存所有订阅者关于订阅的信息,这样就比在运行时使用反射来获得这些订阅者的信息速度要快。

如有不对的地方欢迎大家指正交流。

转载于:https://juejin.im/post/5cadb2536fb9a0687d1167ae

Android-EventBus 使用以及区别相关推荐

  1. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  2. Android @id和@+id区别

    Android中的组件需要用一个int类型的id属性值来表示.id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等.如果在@后面使用"+" ...

  3. android EventBus的简单使用

    今天,简单讲讲Android里关于EventBus的使用. 这几天,由于面试的缘故,我听到了很多Android的流行框架,但是之前自己在公司做APP时并没有使用,所以没有了解.于是在网上查找了资料,学 ...

  4. android 上午零点格式,Android零点一度的区别——Matrix

    2013-07-07 导语:Matrix是android中对图像绘制的处理(旋转.放缩.平移等等),貌似书本翻页就是用这种方式处理的 正文: 1.基于坐标(px,py)旋转degrees度, post ...

  5. Android与IOS测试区别

    Android与IOS测试区别 Android与IOS测试区别 Android与IOS测试区别 Android开源,IOS非开源. 测试工具不同(由于Android开源,IOS非开源,Android自 ...

  6. Android SDK与JDK区别和联系

    Android SDK Android SDK(Soft Development Kit)全称为安卓软件开发工具包,***(通俗理解)***相当于安卓机器的操作系统,类似与windows操作系统,其也 ...

  7. Android EventBus

    Android EventBus 1.Eventbus工作流程 2.导入EventBus库 implementation 'org.greenrobot:eventbus:3.1.1' 3.角色分配 ...

  8. 微信扫一扫 Android 与 IOS 小区别

    wx.scanQRCode({ needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType: ["qrCode","bar ...

  9. Android EventBus使用与思路总结

    首先说说为什么要用它: 平常开发中免不了要进行各种aci或frgm之间的通信,其实aci之间相对还好,必竟可以通过intent方式,也不会觉得耦合性太强,但frgm之间就麻烦了,除了设置各种接口lis ...

  10. android eventbus使用,EventBus使用之基础

    开源项目链接 背景介绍 如果你学习过设计模式,那么当想通知其他组件某些事情发生时你一定会使用观察者模式.好了,既然能想到这个设计模式,那么就来看一个屌爆天的Android开源框架EventBus.主要 ...

最新文章

  1. OSChina 周一乱弹 —— 六天颓废一天看剧
  2. python怎么设置图的大小_python – 如何调整seaborn中的子图大小?
  3. 手游引擎Unity和Cocos各有什么优劣?
  4. (33)FPGA分频设计-偶数分频(第7天)
  5. application实现网页计数_利用百度ai实现文本和图片审核
  6. Android Shape工具 Duck
  7. java bfs dfs_java优先搜索(DFS/BFS)实际应用
  8. 自学python能找到工作吗-自学 Python,我是如何找到工作的?
  9. 信号与信息处理专业属于计算机类吗,信号与信息处理
  10. FusionChartsFree的JSP标签开发
  11. 【vue/iview】将所选择的文本插入文本框的光标处
  12. 正确认识和使用鲁班尺
  13. 蓝桥杯五4史丰收速算
  14. 移动端 网易云 左右滚动导航栏
  15. 传手机ODM厂商拿到三星大单 将带动产业链走出寒冬?
  16. 值得收藏-装修攻略全
  17. android hal单元测试,用于HAL测试的参数化gtest
  18. 最新花椒回放下载方法-马赛克视频助手
  19. 若泽数据公开课-JVM01
  20. 12306 Tickets自动化购票软件操作说明与获取

热门文章

  1. C#连接mysql实例
  2. 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
  3. .Net之路(四)利用DataTable、DataSet返回SQL Server的表或者单个字段
  4. [转载] 中华典故故事(孙刚)——01 天要下雨_娘要嫁人
  5. Winfrom 中如何实现combox 的列表自动显示ToolTip提示
  6. delphi 标题栏相关操作
  7. WPF案例 (五) 对控件界面使用倒影
  8. 微软中国望京新办公楼一游(下)
  9. 从零基础入门Tensorflow2.0 ----四、16.tfrecord基础API使用
  10. android andbase,andbase