美文网首页
EventBus总结

EventBus总结

作者: 落叶随风花落入泥 | 来源:发表于2018-07-11 17:26 被阅读0次

EventBus简述:

EventBus基于观察者模式,把发送事件者和接受事件者分开的一种发布/订阅事件总线框架。

EventBus原理:

注册原理:
当通过API getDefault()函数的时候它是通过构建者模式初始化EventBus 相关属性,
获取EventBus实例,调用API register函数的时候,根据入参的上下文获取注册类的class对象
通过反射获取带有subscriber注解的方法并添加到集合,循环遍历,完成注册。

发送消息原理:
通过调用post API发送事件,获取当前线程队列把所要发送的事件添加到队列中,在循环遍历队列把每个事
件传递给 EventByus核心方法 postSingleEvent方法处理,判断是否已经订阅了此事件的类型,如果已经订
阅就会判 断订阅事件方法的线程模式,进行匹配发送,接受者就会接受到此事件,进行先关的逻辑的操
作。

EventBus 线程调度:
EventBus 事件5种线程模式:
POSTING: 默认线程模式,在哪个线程发送事件就在哪个线程处理事件
MAIN: 在主线程中处理事件,如果在主线程中发送事件,则直接在主线程通过反射处理事件,如果是在子
线程中发送事件,则将事件入队列,通过Handler 切换到主线程执行处理事件。
MAIN_ORDERED:无论在哪个线程中发送事件,都将事件入队列,然后通过handler 切换到主线程,依次
处理事件。
BACKGROUND:如果在主线发送事件,则先将事件入队列,然后通过线程池依次处理事件。如果在子线程
中发送事件,则直接在发送事件的线程通过反射处理事件。
ASYNC:无论在哪个线程发送事件,都将事件入队列,然后通过线程池进行处理。

EventBus功能:

主要用于组件间的通讯,优点是:组件间最大化解耦。

EventBus使用流程:

添加依赖:

①添加依赖:
compile 'org.greenrobot:eventbus:3.1.1'

接收消息页面:

②其实注册订阅模式,只有先注册,才能接受到消息,注册的方式是:
EventBus.getDefault().register(this);
③解除注册:
EventBus.getDefault().unregister(this);
④接收的订阅者是用注解@Subscribe进行标注,参数就是我们订阅的消息体。代码如下:
@Subscribe(threadMode = ThreadMode.POSTING, priority = 4)
 public void onEvent(MyTestMessager myTestMessager) {
    Toast.makeText(this, myTestMessager.getMessager(), Toast.LENGTH_SHORT).show();
    Log.e("aaa", "EventTest: " + myTestMessager.getMessager());
    tv_test.setText(myTestMessager.getMessager());
  }
  这里可以设置EventBus工作的线程模式 和设置线程的优先级别

发送消息,在发送页面:

①普通发送:
EventBus.getDefault().post(new MyTestMessager("启动新界面传递的值"));

MyTestMessager: 是自定义的Bean类,更具自己需要随意定义,可以定义一下自己逻辑需要的属性,在发 
送之前给bean类设置好,在消息处理处,可以通过这些属性做相应逻辑处理。

②粘性发送:
 .....

小方案:
当我们从A activity 启动B activity ,并用EventBus进行传值时候是不能成功的,原因是b还没有注册,在a中进行post传值,b中是接受不到消息的。
解决的办法是:在a中的onStop方法中进行传递数据。因为启动界面创建后才会调用onStop方法。

相关文章

  • EventBus工作原理

    以下总结转自:EventBus源码研读 EventBus工作原理 最后我们再来从设计者的角度看一看EventBus...

  • Rexxar Android 系列学习(4) 错误处理

    EventBus 首先介绍一下 EventBus ,具体可以查看之前总结的 SimpleNews 项目的重构之旅(...

  • EventBus总结

    EventBus一直在使用,对它的原理也大致明白,但是具体的细节却不清不楚的,有时候会想一个问题,让我自己写这么一...

  • EventBus总结

    EventBus简述: EventBus基于观察者模式,把发送事件者和接受事件者分开的一种发布/订阅事件总线框架。...

  • EventBus总结

    一、Android消息传递之Handler消息机制(www.cnblogs.com/whoislcj/p/5590...

  • 源码解析EventBus的注册及事件发送

    最近正在学习EventBus源码,正好总结记录一下~ EventBus是一个针对Android优化的发布-订阅事件...

  • Eventbus

    以下都是本人收集和总结的内容: 1. 什么是Eventbus EventBus是一个基于观察者模式的事件发布/订阅...

  • EventBus的简单使用

    EventBus 做个阶段总结 项目上用的越来越多了 之前项目上一直用的是广播 换成eventbus之后感觉世...

  • EventBus初学总结

    什么是EventBus? EventBus是基于发布/订阅者机制的,对事件进行发布和接受,例如Intent、Han...

  • android EventBus总结

    EventBus定义: EventBus是一个基于观察者模式的事件发布/订阅框架,开发者通过极少的代码去实现多个模...

网友评论

      本文标题:EventBus总结

      本文链接:https://www.haomeiwen.com/subject/jcbfpftx.html