EventBus3.0——Stick和Priority
来源:互联网 发布:豆瓣是什么软件 编辑:程序博客网 时间:2024/06/03 21:23
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
- EventBus3.0——Stick和Priority
- EventBus3.0——基本使用
- EventBus3.0——索引的使用
- Android——EventBus3.0的使用详解
- Eventbus3.0
- EventBus3.0
- EventBus3.0
- EventBus3.0
- EventBus3.0-beta1和之前的区别
- EventBus3.0的入门和使用
- EventBus3.0-优先级和取消事件
- 30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)
- 优先队列——priority queue
- 优先级队列(priority——queue)
- Heap 和 priority queue
- Android之EventBus1.0 和EventBus3.0的使用详解
- Stick
- Stick
- 第10题 正则表达式匹配(动态规划)
- android videoview
- 第18章 认识系统服务(daemons)
- 微软“咸鱼翻身”:股价沉沦17年后创历史新高
- 第22章 软件安装:源码与Tarball
- EventBus3.0——Stick和Priority
- 第11题 容器装水问题
- 第八周 自由落体问题
- EXCEL 2016年1月2日 转成 2016-01-02
- 第12题 数字转为罗马数字
- Migrate report from My Folders of users
- 第三周 数据算法实现与顺序结构程序设计的程序(一、二)(北理)
- 第15题 三个数的和为确定值
- 报餐制食堂月消费报表