您的位置:首页 > 其它

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中注册:

@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种的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: