关于EventBus用法总结
2016-04-05 16:12
471 查看
简而言之,EventBus是一个事件发布和订阅的框架。
使用方法:
1、Android studio导入:compile'org.greenrobot:eventbus:3.0.0'
2、定义事件类型:
3、订阅者:
详细讲解:
EventBus包含4个ThreadMode:ThreadMode.POSTING、ThreadMode.MAIN、ThreadMode.BACKGROUND、ThreadMode.ASYNC
例:
ThreadMode.MAIN:表示会在UI线程中执行
ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用
ThreadMode.ASYNC:加入后台任务队列,使用线程池调用
Sticky Events的用法
简单来说,若之前事件使用postSticky进行发布且执行过,则当sticky为true的订阅者再次订阅时,会去stickyEvents去查找事件,然后立即去post执行。
例:
这个没什么好说的,只需要知道优先级越高越优先执行,默认的优先级为0,使用例:
到这就学完了。
使用方法:
1、Android studio导入:compile'org.greenrobot:eventbus:3.0.0'
2、定义事件类型:
public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
3、订阅者:
@Subscribe public void onMessageEvent(MessageEvent event){ Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); } @Subscribe public void handleSomethingElse(SomeOtherEvent event){ doSomethingWith(event); }4、注册及解绑EventBus
@Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { EventBus.getDefault().unregister(this); super.onStop(); }5、发送事件
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));OK,这就是EventBus的简单用法。对于上述代码,需要注意的是:发送事件的类中不需要进行注册及解绑EventBus,但在订阅者所在的类中则需要进行注册及解绑EventBus。EventBus中事件的发送及订阅是通过事件类型,即本例中的MessageEvent,进行匹配的。
详细讲解:
EventBus包含4个ThreadMode:ThreadMode.POSTING、ThreadMode.MAIN、ThreadMode.BACKGROUND、ThreadMode.ASYNC
例:
@Subscribe(threadMode = ThreadMode.POSTING) public void onMessage(MessageEvent event) { log(event.message); }ThreadMode.POSTING:默认使用该模式,表示该方法会在当前发布事件的线程执行
ThreadMode.MAIN:表示会在UI线程中执行
ThreadMode.BACKGROUND:若当前线程非UI线程则在当前线程中执行,否则加入后台任务队列,使用线程池调用
ThreadMode.ASYNC:加入后台任务队列,使用线程池调用
Sticky Events的用法
简单来说,若之前事件使用postSticky进行发布且执行过,则当sticky为true的订阅者再次订阅时,会去stickyEvents去查找事件,然后立即去post执行。
例:
EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));
@Subscribe(sticky = true) public void onEvent(MessageEvent event) { textField.setText(event.message); }若必要也可以移除之前发布过的postSticky,例:
MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class); // Better check that an event was actually posted before if(stickyEvent != null) { EventBus.getDefault().removeStickyEvent(stickyEvent); }Subscriber Priorities(优先级)
这个没什么好说的,只需要知道优先级越高越优先执行,默认的优先级为0,使用例:
@Subscribe(priority = 1); public void onEvent(MessageEvent event) { … }
到这就学完了。
转载请注明出处:http://blog.csdn.net/wl1769127285/article/details/51065015
本文参考:http://greenrobot.org/eventbus/相关文章推荐
- 机器学习 Numpy Scipy Matplotlib Scikit-Learn的安装
- FragmentViewPager简单理解
- 【Chromium中文文档】Profile架构(看看谷歌家的重构)
- 浏览器环境下Javascript脚本加载与执行探析之DOMContentLoaded
- 【前端】使用CSS使元素居中的几种方式
- 本地Spring容器关闭的时机
- 快速gcd vs 普通gcd
- Redis命令-有序集合-zadd
- redis
- Peter and Snow Blower
- 宏和函数的区别
- spring框架学习(四)自动装配
- spring框架学习(三)junit单元测试
- vipca报错 CRS-1006,CRS-0215
- maven pom.xml各地址来源
- 【hihoCoder 1036】Trie图
- inline模式_大小写
- python import eventlet包时提示ImportError: cannot import name eventlet
- 游戏开发了解测试工作(4)
- python with魔法语句