Android EventBus的初步使用

项目地址:https://github.com/greenrobot/EventBus/

项目使用的技术呢,说白了,就是将要传递的event(一个Object对象,可任意自定义),发送到公共的组件EventBus中进行存储,

在通过EventBus传递给订阅者(使用者),订阅者收到event消息,就可以自行处理了。

不要被标题迷惑了,其实在任何地方 都可以发送和接收event(event,是一个通称,表示任意的数据对象,是一个消息类型)。

当然有需要注意的地方了,往下看吧。

分析一个基本的使用流程:

1. 自定义一个event类型:需要什么样的数据,就定义成什么样,随意了

2. 确定在哪里来接收该event,就在哪里调用EventBus.getDefault().register()进行订阅者的注册。

EventBus 一看就是个单例类,所以通过它存储、发送event。

register()有多个重载方法:

[java] view
plain
copyprint?

  1. public void register(Object subscriber) {
  2. register(subscriber, false, 0);
  3. }
  4. public void register(Object subscriber, int priority) {
  5. register(subscriber, false, priority);
  6. }
  7. public void registerSticky(Object subscriber) {
  8. register(subscriber, true, 0);
  9. }
  10. public void registerSticky(Object subscriber, int priority) {
  11. register(subscriber, true, priority);
  12. }
  13. private void subscribe(Object subscriber, SubscriberMethod subscriberMethod, boolean sticky, int priority) {
  14. ...
  15. }

看名字也很好理解,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
plain
copy

  1. public class AnyEventType {
  2. public AnyEventType(){}
  3. }

(2)在要接收消息的页面注册:

[java] view
plain
copy

  1. eventBus.register(this);

(3)发送消息

[java] view
plain
copy

  1. eventBus.post(new AnyEventType event);

(4)接受消息的页面实现(共有四个函数,各功能不同,这是其中之一,可以选择性的实现,这里先实现一个):

[java] view
plain
copy

  1. public void onEvent(AnyEventType event) {}

(5)解除注册

[java] view
plain
copy

  1. eventBus.unregister(this);

顺序就是这样,下面举个例子来说明下:

请参考 http://blog.csdn.net/harvic880925/article/details/40660137

时间: 2024-08-02 15:32:39

Android EventBus的初步使用的相关文章

EventBus(一):Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

Android EventBus源码解析, 带你深入理解EventBus

上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: [java] view plain copy public class SampleComponent extends Fragment { @Override public vo

Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

Android EventBus实战 没听过你就out了

转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/40794879,本文出自:[张鸿洋的博客] 1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者

Android EventBus源码解析 带你深入理解EventBus

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: public cl

Android EventBus现实 听说你out该

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/40794879.本文出自:[张鸿洋的博客] 1.概述 近期大家面试说常常被问到EventBus,github上果断down了一份.地址:https://github.com/greenrobot/EventBus.的确是个不错的框架.主要用于事件的公布和订阅. EventBus定义:是一个公布 / 订阅的事件总线. 这么说应该包括4个成分:公布者,订阅者,事件.总线. 那么这四者

从头学Android之Service初步二

在上一篇,我们学习了通过startService来启动Service,由于篇幅过长,所以这一篇是接上一篇的 二.bindService方法启动Service 先看bindSerivce(Intent service,ServiceConnection conn,int flags)函数 参数说明: service:通过该参数也就是Intent我们可以启动指定的Service conn:该参数是一个ServiceConnection对象,这个对角用于监听访问者(也可以说成是客户端)与Service

android EventBus 的使用

今天简单的介绍 一下啊 android  EventBus 的使用 EventBus 在官方介绍中是订阅......什么的 一大堆  ,  在我android 菜鸟眼里 就是用来代替android 广播的  简单粗暴 效率高; 其实用法挺简单 的   就   三步   注册(官方叫订阅)   接收   取消(取消订阅). 算了 不多说直接上代码 ; 如果你用的是 android studio 直接在build.gradle 里添加 : compile files('libs/EventBus2.

Android EventBus技能点梳理

EventBus为Github上的开源项目,地址:https://github.com/greenrobot/EventBus 疑问:1. 现在都是Android Studio创建的项目,如何导入这些项目(对工具不熟悉):2. 如何得到这些开源项目的.jar包? EventBus概念分析(获取感性认识): 所述publisher为发布者,subscriber为订阅者:Event的Publisher为事件的所有者,而各个Subscriber会收到对应的Event. 其主要功能是替代Intent.H