Otto:EventBus

2014年6月20日 星期五

15:14

参考: http://www.mythroad.net/?p=4151

Otto 是Android系统的一个Event Bus模式类库。用来简化应用组件间的通信.

主要使用的类有com.squareup.otto.Bus类、@Produce、@Subscribe注解

@Subscribe 注解告诉Bus该函数订阅了一个事件,该事件的类型为该函数的参数类型;

@Produce注解告诉Bus该函数是一个事件产生者,产生的事件类型为该函数的返回值。

可以在Activity或者Fragment的onResume中注册监听器,在onPause中取消注册:

@Override protected void onResume() {
    super.onResume();

// Register outselves so that we can provide the initial
value.
   
BusProvider.getInstance().register(this);
  }

@Override protected void onPause() {
    super.onPause();

// Always unregister when an object no longer should be on the
bus.
   
BusProvider.getInstance().unregister(this);
  }

在一个位置定义生产函数:@Produce

@Produce
public LocationChangedEvent produceLocationEvent() {
    // Provide an initial value for
location based on the last known position.
    return new LocationChangedEvent(lastLatitude,
lastLongitude);
  }

在需要订阅该事件的地方捕获该事件:@Subscribe

@Subscribe public void onLocationChanged(LocationChangedEvent
event) {

}

不管是生产者还是订阅者都需要向Bus注册自己:

Bus.register(this);

Otto的事件调用默认在主线程(应用的UI线程):

下面的效果是一样的
Bus bus1 = new Bus();
Bus bus2 = new Bus(ThreadEnforcer.MAIN);

如果不关系在哪个线程中执行:可以通过ThreadEnforcer.ANY指定

还可以通过ThreadEnforcer接口自定义线程模型

生产(发布):bus.post(new
AnswerAvailableEvent(42));

Posting是同步的,所以程序执行时保证所有的订阅者都准确被调用

订阅:@Subscribe,仅包含一个参数,public描述符,方法名任意

Otto:EventBus的更多相关文章

  1. 源码阅读系列:EventBus

    title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常会用到的开源库,即使是不直接用的 ...

  2. Android 框架学习1:EventBus 3.0 的特点与如何使用

    前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...

  3. ABP源码分析二十五:EventBus

    IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...

  4. Guava学习笔记:EventBus

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现.对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和 ...

  5. Guava学习笔记:EventBus(转)

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现.对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和 ...

  6. eShopOnContainers 知多少[5]:EventBus With RabbitMQ

    1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需 ...

  7. 第三方框架:EventBus

    1 研发背景 案例:我们在主页点收藏按钮,未登录状态,跳登录界面,在登录界面跳注册页面,注册成功,关闭注册页面,关闭登录页面,回到主页,刷新item列表和登录状态. 我们一般会用到发送广播和接收广播来 ...

  8. Android消息处理:EventBus、BroadCast和Handler-优缺点比较

    上一篇研究了EventBus的使用方法,但随之而来的一系列问题也是值得思考,EventBus到底给项目带来了什么?它与Android原有的消息处理机制有什么区别和优缺点?项目在什么场景下采用Event ...

  9. Orchard源码:EventBus&EventHandler

    概述 看源码是一件吃力又很爽的事情,昨天还被搞的一头雾水,今天忽然守得云开见月明.明白它设计意图的同时,感觉自己又提升了一步:) Orchard刚开始看往往毫无头绪,建议可以从Orchard.Fram ...

随机推荐

  1. 【BZOJ3244】【NOI2013】树的计数(神仙题)

    [BZOJ3244][NOI2013]树的计数(神仙题) 题面 BZOJ 这题有点假,\(bzoj\)上如果要交的话请输出\(ans-0.001,ans,ans+0.001\) 题解 数的形态和编号没 ...

  2. CF Playrix Codescapes Cup Problems Analysis

    A 理清思路模拟 B 先对3个array排序,然后每次从某个array的头删数,可保证每个数必被处理1次,O(n log n) (set维护也行) C 分3类情况讨论,一种为: p1≤p2 & ...

  3. python基础----实现上下文管理协议__enter__和__exit__

    我们知道在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明_ ...

  4. 将项目通过maven install到本地仓库后,Intellij中其他调用的项目无法引用该jar

    通常,我们会新建一个项目,其为其他项目添加公共的能力.其他项目可以引用其maven坐标来使用其提供的功能. 但最近做项目发现,修改了公共项目中的代码,并且使用mavan install将其jar安装到 ...

  5. HDU--2722

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2722 分析:简单最短路,读入数据烦. #include<iostream> #includ ...

  6. php中foreach使用引用的陷阱

    有时候我们为了在循环过程中改变数组项的值,在foreach的时候变量入口可以加个&符合, 表示,循环过程中使用数组中原来的值,而不是一个复制的值,如 foreach ($array as &a ...

  7. web项目中解决post乱码和get乱码的方法

    前提复习编码问题产生的原因: 1.  什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为U ...

  8. svnserver配置详解

    svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库. svnserve可以通过配置文件 ...

  9. c++数组遍历十种方式

    int ia[3][4] = {1,2,3,4,5,6,7,8}; //下标 for (int i = 0; i < 3; i++) {     for (int j = 0; j < 4 ...

  10. Spring bean - scope详解

    Scope是定义Spring如何创建bean的实例的. 在创建bean的时候可以带上scope属性,scope有下面几种类型. Singleton 这也是Spring默认的scope,表示Spring ...