美文网首页
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总结

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