EventBus Demo
2016-04-06 23:37
387 查看
参考资料:
http://greenrobot.org/eventbus/documentation/how-to-get-started/
/article/2594044.html
/article/1503560.html
http://a.codekk.com/detail/Android/Trinea/EventBus%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90
https://github.com/greenrobot/EventBus
示例程序:
https://github.com/saragitshare/EventBusDemo.git
1 EventBus是基于订阅和发布的一种通信机制,使用流程如下:
注册订阅者 : 注册接受event的Object。 例如: EventBus.getDefault().register(this);
发布消息 : 发布Event。例如:EventBus.getDefault().post(new Long(1000));
接受消息: 接受Event,并处理。例如:EventBus.getDefault().post(new Long(1000));
2 Activity 接受EventBus的消息,要注册以及及时注销该Activity Object。
通常在onCreate中注册:
通常在onStop或者onDestroy注销:
3、Fragment 接受EventBus的消息,要注册以及及时注销该Fragment Object。
通常在onCreateView或者onStart中注册, 在onStop或者onDestroy中注销。
4 EventBus接受和处理消息(事件==消息)的模式有4种。
(1) eventbus-3.3.0
ThreadMode.POSTING: 发布事件和接收事件线程在同一个线程。默认可以不加Subscribe标识。
ThreadMode.MAIN: 发送方= 任何一个线程(包括主线程),接收方 = UI线程。
ThreadMode.BACKGROUND: 如果发送方= UI线程,接收方 = 子线程。 如果发送方= 子线程,接收方 = 同一个子线程。
ThreadMode.POSTING: 发送方= 任何一个线程(包括主线程),接收方 = 新的子线程。
说明:
eventbus-3.3.0中,订阅函数的必须添加“@Subscribe(threadMode = ThreadMode.POSTING)标识”
eventbus-3.3.0中,订阅函数的名称可以是任意的。
(2) 在eventbus-2.2.1中,
onEvent : 发布事件和接收事件线程在同一个线程。
onEventMainThread : 发送方= 任何一个线程(包括主线程),接收方 = UI线程。
onEventBackgroundThread : 如果发送方= UI线程,接收方 = 子线程。 如果发送方= 子线程,接收方 = 同一个子线程。
onEventAsync 发送方= 任何一个线程(包括主线程),接收方 = 新的子线程。
说明:
eventbus-2.2.1中,4种模式的对应订阅函数名是固定的。
eventbus-2.2.1中,4种模式的对应eventbus-3.3.0,只用方法上有点区别。
5、eventbus:3.0.0的行为完全不同于eventbus-2.2.1。原来不知道是作者修改了行为,还是引入了重大bug,后来发现是作者为了使用越规范和方便,增加了Subscribe标识。
6、Lib库的升级要严格测试,以免发生类似该demo种的问题。
http://greenrobot.org/eventbus/documentation/how-to-get-started/
/article/2594044.html
/article/1503560.html
http://a.codekk.com/detail/Android/Trinea/EventBus%20%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90
https://github.com/greenrobot/EventBus
示例程序:
https://github.com/saragitshare/EventBusDemo.git
1 EventBus是基于订阅和发布的一种通信机制,使用流程如下:
注册订阅者 : 注册接受event的Object。 例如: EventBus.getDefault().register(this);
发布消息 : 发布Event。例如:EventBus.getDefault().post(new Long(1000));
接受消息: 接受Event,并处理。例如:EventBus.getDefault().post(new Long(1000));
2 Activity 接受EventBus的消息,要注册以及及时注销该Activity Object。
通常在onCreate中注册:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.eventbus_demo_layout); ButterKnife.inject(this); EventBus.getDefault().register(this); }
通常在onStop或者onDestroy注销:
@Override protected void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); }
3、Fragment 接受EventBus的消息,要注册以及及时注销该Fragment Object。
通常在onCreateView或者onStart中注册, 在onStop或者onDestroy中注销。
4 EventBus接受和处理消息(事件==消息)的模式有4种。
(1) eventbus-3.3.0
ThreadMode.POSTING: 发布事件和接收事件线程在同一个线程。默认可以不加Subscribe标识。
ThreadMode.MAIN: 发送方= 任何一个线程(包括主线程),接收方 = UI线程。
ThreadMode.BACKGROUND: 如果发送方= UI线程,接收方 = 子线程。 如果发送方= 子线程,接收方 = 同一个子线程。
ThreadMode.POSTING: 发送方= 任何一个线程(包括主线程),接收方 = 新的子线程。
说明:
eventbus-3.3.0中,订阅函数的必须添加“@Subscribe(threadMode = ThreadMode.POSTING)标识”
eventbus-3.3.0中,订阅函数的名称可以是任意的。
(2) 在eventbus-2.2.1中,
onEvent : 发布事件和接收事件线程在同一个线程。
onEventMainThread : 发送方= 任何一个线程(包括主线程),接收方 = UI线程。
onEventBackgroundThread : 如果发送方= UI线程,接收方 = 子线程。 如果发送方= 子线程,接收方 = 同一个子线程。
onEventAsync 发送方= 任何一个线程(包括主线程),接收方 = 新的子线程。
说明:
eventbus-2.2.1中,4种模式的对应订阅函数名是固定的。
eventbus-2.2.1中,4种模式的对应eventbus-3.3.0,只用方法上有点区别。
5、eventbus:3.0.0的行为完全不同于eventbus-2.2.1。原来不知道是作者修改了行为,还是引入了重大bug,后来发现是作者为了使用越规范和方便,增加了Subscribe标识。
6、Lib库的升级要严格测试,以免发生类似该demo种的问题。
相关文章推荐
- 使用自定义ui的ShareSDK短信验证码功能
- 如何扩大VMware虚拟机的硬盘磁盘空间大小
- 删除数据表中除id外其他字段相同的冗余信息
- Ueditor 前后端数据交互
- GET URL设置值为true 和'true'的区别,me和'me'的区别
- 解决UI主线程阻塞原因
- Qt for iOS,Qt 与Objective C混合编程
- [C++]C++语言类成员变量初始化总结
- gradle学习笔记(一) 构建工具介绍
- 作业四--结对编程四则运算
- 结对编程项目--四则运算
- GitHub中国区前100名到底是什么样的人?
- VMWare的网络三种设置方式比较
- Python垃圾回收机制
- React Native环境搭建
- class file解析一
- 归并排序(mergeSort)之递归实现
- 常用工具类集合
- android AutoCompleteTextView和Spinner选中项加亮
- 内部类