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描述符,方法名任意

最新文章

  1. 【Xcode 4 无法打开 Xcode 5 DP 打开过的工程文件 解决方法】
  2. 《DSP using MATLAB》示例Example4.12
  3. 变废为宝,将Discuz废弃的cache机制引入到memory体系中
  4. 内存管理算法--Buddy伙伴算法
  5. Android开发--去掉标题栏
  6. 格而知之9:一些关于GCD的笔记
  7. 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】
  8. SQLAlchemy on the way
  9. 条形码--JsBarcode
  10. 使用tcpcopy复制线上流量进行测试
  11. Codeforces Round #485 (Div. 2) D. Fair
  12. Java 使用 int 数据计算百分比
  13. js数据校验插件
  14. Codeforces 264C Choosing Balls 动态规划
  15. 51nod 1349 最大值(单调栈)
  16. 【Java并发编程】:并发新特性—Executor框架与线程池
  17. HDU 4548 美素数 在线打表加数状数组
  18. idea 常用快捷键 笔记
  19. SQL连接的分类
  20. 常用的Oracle的doc命令

热门文章

  1. 【BZOJ5333】荣誉称号(动态规划)
  2. scala(二)
  3. portal商品展示功能逻辑
  4. 题解【bzoj3529 [SDOI2014]数表】
  5. varchar字段
  6. [DeeplearningAI笔记]序列模型1.10-1.12LSTM/BRNN/DeepRNN
  7. uva 11971 Polygon
  8. HDU 1402 FFT 大数乘法
  9. Spring集成quartz集群配置总结
  10. ⑤ 设计模式的艺术-05.原型(Prototype)模式