EventBus3.0——Stick和Priority

EventBus3.0——Stick和Priority

上一章讲述了EventBus3.0的基本使用,相对以前版本最大的区别在于引入了注解,其中threadMode变量的值对应了以前版本的四大观察者,今天主要讲述的是注解中的其他两大变量Stick和Priority的使用。注:EventBus采用的是观察者模式,观察者即订阅者(叫法上的差别请不要太较真,重要的还是思想)。

Stick

顾名思义,就是粘性,那么粘性的作用是什么呢,前一章我们有提到EventBus使用
第一步是注册观察者
第二步是创建观察者
第三步是发布事件
那么这里的Stick的作用就是可以先发布事件再注册观察者,代码如下:

@Override
    public void onCreate(Bundle savedInstanceState) {
        EventBus.getDefault().postSticky(new Student("10","pdm"));
        EventBus.getDefault().register(this);
        super.onCreate(savedInstanceState);
    }

这样是不是就可以了呢?!当然不行,我们还需要在注解中给Stick赋值,不然无效:

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void pdmEventMainThread(Student student) {
        Log.e(TAG,"onEventMainThread: " + student.getContent());
    }

我们通过查看日志,来确定观察者能否收到消息(这里需要注意的是,因为是在onCreate中发布事件,不能做更新UI的操作):
这里写图片描述
搞定!当然,所有发布的事件都是可以移除的,粘性事件也不例外,我们看下有哪些方法用于移除事件:
这里写图片描述
至于怎么用就不用说了吧,接下来我们讲一下Priority。

Priority

顾名思义,优先级,如果同时存在多个观察者(threadMode相同),我们是不是可以通过优先级的设定,来决定哪一个观察者获得事件或者消息的顺序,这样就更加灵活了,我们来试一下(为了方便理解,我们这里以发送post事件为例):

@Override
    public void onCreate(Bundle savedInstanceState) {
        EventBus.getDefault().register(this);
        EventBus.getDefault().post(new Student("10","pdm"));
        super.onCreate(savedInstanceState);
    }
@Subscribe(threadMode = ThreadMode.POSTING,priority = 1,sticky = true)
    public void pdmEvent(Student student) {
        Log.e(TAG,"onEvent: " + student.getContent());
    }
    @Subscribe(threadMode = ThreadMode.POSTING,priority = 2,sticky = true)
    public void pdmEventMainThread(Student student) {
        Log.e(TAG,"onEventMainThread: " + student.getContent());
    }
    @Subscribe(threadMode = ThreadMode.POSTING,priority = 3,sticky = true)
    public void pdmEventBackground(Student student) {
        Log.e(TAG,"onEventBackground: " + student.getContent());
    }
    @Subscribe(threadMode = ThreadMode.POSTING,priority = 4,sticky = true)
    public void pdmEventAsync(Student student) {
        Log.e(TAG,"onEventAsync: " + student.getContent());
    }

接下来依然是通过日志验证:
这里写图片描述
明显priority值越大,越先收到事件或消息。注意:优先级必须针对同一类型的观察者,即ThreadMode相同。
下一章我将讲述EventBus针对反射机制优化的索引机制,极大程度的优化了EventBus的使用效率。小伙伴再也不用担心使用EventBus会影响程序性能了。
最后给没有用过EventBus的朋友提供一个小demo:
http://download.csdn.net/detail/aiyh0202/9662495

你可能感兴趣的:(EventBus,EventBus3.0使用详解)