Android EventBus的初步使用
2014-12-01 18:44
411 查看
项目地址:https://github.com/greenrobot/EventBus/
项目使用的技术呢,说白了,就是将要传递的event(一个Object对象,可任意自定义),发送到公共的组件EventBus中进行存储,
在通过EventBus传递给订阅者(使用者),订阅者收到event消息,就可以自行处理了。
不要被标题迷惑了,其实在任何地方 都可以发送和接收event(event,是一个通称,表示任意的数据对象,是一个消息类型)。
当然有需要注意的地方了,往下看吧。
分析一个基本的使用流程:
1. 自定义一个event类型:需要什么样的数据,就定义成什么样,随意了
2. 确定在哪里来接收该event,就在哪里调用EventBus.getDefault().register()进行订阅者的注册。
EventBus 一看就是个单例类,所以通过它存储、发送event。
register()有多个重载方法:
[java] view
plaincopyprint?
public void register(Object subscriber) {
register(subscriber, false, 0);
}
public void register(Object subscriber, int priority) {
register(subscriber, false, priority);
}
public void registerSticky(Object subscriber) {
register(subscriber, true, 0);
}
public void registerSticky(Object subscriber, int priority) {
register(subscriber, true, priority);
}
private void subscribe(Object subscriber, SubscriberMethod subscriberMethod, boolean sticky, int priority) {
...
}
看名字也很好理解,subscriber即订阅者(接收处理event的类);priority即优先级,表示优先处理;
sticky粘性的意思,在源码中会有一个map对象,来存储sticky的event,
因为map的key是onEvent...()方法的第一个参数类型,
一般呢,这第一个参数就是订阅者对象,所以map会存储该类型的最后一次发送的event对象。
这些register都会最终调用一个私有register方法实现的,在这个方法里有个参数是SubscriberMethod对象。
调用subscriberMethod.findSubscriberMethods(), 查找到订阅者定义的接收处理event的方法,
并在EventBus中存起来。
3. 在订阅者中定义接收处理event的方法,约定为:
onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync
使用时类似这样的:public void onEvent(Object event)。 onEvent对应PostThread,其他各自对应ThreadMode中的其他定义。
onEvent后面跟的这些名称的意义,见ThreadMode
4. 发送事件
调用EventBus.getDefault().post(Object event),发送事件
源码中会调用postToSubscription(),发送event给对应的订阅者方法
ThreadMode
这是一个枚举类。定义了四种类型:PostThread、MainThread、BackgroundThread、Async
PostThread 事件event的处理和发送都在相同线程中
MainThread 事件event的处理在主线程中,小心ANR
BackgroundThread 事件event的处理在后台线程中,它是阻塞式的,如有多个事件发送过来,会一个一个处理
Async 事件event的处理是异步的,即新开一个线程进行处理。
简单使用
(1)自定义一个类,可以是空类,比如:
[java] view
plaincopy
public class AnyEventType {
public AnyEventType(){}
}
(2)在要接收消息的页面注册:
[java] view
plaincopy
eventBus.register(this);
(3)发送消息
[java] view
plaincopy
eventBus.post(new AnyEventType event);
(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
[java] view
plaincopy
public void onEvent(AnyEventType event) {}
(5)解除注册
[java] view
plaincopy
eventBus.unregister(this);
顺序就是这样,下面举个例子来说明下:
请参考 http://blog.csdn.net/harvic880925/article/details/40660137
项目使用的技术呢,说白了,就是将要传递的event(一个Object对象,可任意自定义),发送到公共的组件EventBus中进行存储,
在通过EventBus传递给订阅者(使用者),订阅者收到event消息,就可以自行处理了。
不要被标题迷惑了,其实在任何地方 都可以发送和接收event(event,是一个通称,表示任意的数据对象,是一个消息类型)。
当然有需要注意的地方了,往下看吧。
分析一个基本的使用流程:
1. 自定义一个event类型:需要什么样的数据,就定义成什么样,随意了
2. 确定在哪里来接收该event,就在哪里调用EventBus.getDefault().register()进行订阅者的注册。
EventBus 一看就是个单例类,所以通过它存储、发送event。
register()有多个重载方法:
[java] view
plaincopyprint?
public void register(Object subscriber) {
register(subscriber, false, 0);
}
public void register(Object subscriber, int priority) {
register(subscriber, false, priority);
}
public void registerSticky(Object subscriber) {
register(subscriber, true, 0);
}
public void registerSticky(Object subscriber, int priority) {
register(subscriber, true, priority);
}
private void subscribe(Object subscriber, SubscriberMethod subscriberMethod, boolean sticky, int priority) {
...
}
看名字也很好理解,subscriber即订阅者(接收处理event的类);priority即优先级,表示优先处理;
sticky粘性的意思,在源码中会有一个map对象,来存储sticky的event,
因为map的key是onEvent...()方法的第一个参数类型,
一般呢,这第一个参数就是订阅者对象,所以map会存储该类型的最后一次发送的event对象。
这些register都会最终调用一个私有register方法实现的,在这个方法里有个参数是SubscriberMethod对象。
调用subscriberMethod.findSubscriberMethods(), 查找到订阅者定义的接收处理event的方法,
并在EventBus中存起来。
3. 在订阅者中定义接收处理event的方法,约定为:
onEvent、onEventMainThread、onEventBackgroundThread、onEventAsync
使用时类似这样的:public void onEvent(Object event)。 onEvent对应PostThread,其他各自对应ThreadMode中的其他定义。
onEvent后面跟的这些名称的意义,见ThreadMode
4. 发送事件
调用EventBus.getDefault().post(Object event),发送事件
源码中会调用postToSubscription(),发送event给对应的订阅者方法
ThreadMode
这是一个枚举类。定义了四种类型:PostThread、MainThread、BackgroundThread、Async
PostThread 事件event的处理和发送都在相同线程中
MainThread 事件event的处理在主线程中,小心ANR
BackgroundThread 事件event的处理在后台线程中,它是阻塞式的,如有多个事件发送过来,会一个一个处理
Async 事件event的处理是异步的,即新开一个线程进行处理。
简单使用
(1)自定义一个类,可以是空类,比如:
[java] view
plaincopy
public class AnyEventType {
public AnyEventType(){}
}
(2)在要接收消息的页面注册:
[java] view
plaincopy
eventBus.register(this);
(3)发送消息
[java] view
plaincopy
eventBus.post(new AnyEventType event);
(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):
[java] view
plaincopy
public void onEvent(AnyEventType event) {}
(5)解除注册
[java] view
plaincopy
eventBus.unregister(this);
顺序就是这样,下面举个例子来说明下:
请参考 http://blog.csdn.net/harvic880925/article/details/40660137
相关文章推荐
- Android -eventbus的初步使用 和 OnSharedPreferenceChangeListener (SharedPreference内容改变)监听
- Android EventBus的初步使用
- Android menu 使用初步
- Android开发历程_10(LayoutAnimationController的初步使用)
- 使用 android EventBus的一个误区
- EventBus使用详解(一)——初步使用EventBus
- 触控鼠标 (使用手机控制电脑,支持IOS,android.OSx 和windows)进入初步推广阶段
- Android中Sqlite使用初步
- EventBus的初步使用和线程间的调用,已经一些相关安全的修饰词
- 事件总线EventBus Android开源库的使用
- maven的初步使用--Eclipse android maven的项目创建
- 在Android下使用openGLES2.0的初步过程
- Android UI初步——level-list的使用
- android调试初步(用eclipse 打断点调试 和使用logcat输出))(转)
- [Android studio] Android studio win 安装于初步使用
- android 开源工具 EventBus的使用和源码分析
- Android 之 重力感应初步使用
- ArcGIS for Android 之IdentifyTask初步认识和使用
- Android之使用Ftrace初步分析界面卡顿问题
- EventBus使用详解(一)——初步使用EventBus