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. 如何用Qt Python创建简单的桌面条形码应用

    Qt for Python可以快速跨平台的GUI应用.这篇文章分享下如何结合Dynamsoft Barcode Reader SDK来创建一个简单的读码应用. 安装Qt for Python 官方站点 ...

  2. 【BZOJ3714】Kuglarz(最小生成树)

    [BZOJ3714]Kuglarz(最小生成树) 题面 BZOJ Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯 ...

  3. 【recording】gdoi2018

    怎么说..虽然感觉其实..不太想写游记.. 但是回来看着桌面上的课本还是忍不住了(想想班里进度就..qwq)还是写一下吧 Day x(x<0) 之前大家溜到首都开心集训了一波然后被虐的很开心.. ...

  4. 在VS2010中使用Git【图文】

    http://blog.csdn.net/laogong5i0/article/details/10974285 在之前的一片博客<Windows 下使用Git管理Github项目>中简单 ...

  5. STL源码分析-vector

    http://note.youdao.com/noteshare?id=55dc651a7489f1413b3a3169401dcf94

  6. 「Python」pandas入门教程

    pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...

  7. VS Code 配置 C/C++ 环境

    写作原因 微软的 VSCode 一直以来为人诟病的一个问题就是对于 C/C++ 工程的编译以及调试支持度有限,配置起来比较复杂,但是 vscode-cpptools 团队经过一段时间的 bug 修复之 ...

  8. Bayesian optimisation for smart hyperparameter search

    Bayesian optimisation for smart hyperparameter search Fitting a single classifier does not take long ...

  9. Java面试中常问的Spring方面问题(涵盖七大方向共55道题,含答案)

    1.一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? VersionFeatureSpring 2.5发布于 2007 年.这是第一个支持注解的版本.Spring 3 ...

  10. Javascript装饰器的妙用

    最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西.装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 ...