Otto介绍
来源:互联网 发布:淘宝商城冰箱价格 编辑:程序博客网 时间:2024/05/22 14:37
Otto 是Android系统的一个Event Bus模式类库。用来简化应用组件间的通信。关于Event Bus模式的详细情况,请参考这里。
Otto的使用是比较简单的,先到项目主页下载源码:https://github.com/square/otto
下载后的源码目录中包含一个library和sample目录, library目录是类库源代码;sample目录是示例代码。
主要使用com.squareup.otto.Bus类、@Produce、 @Subscribe 注解。
在组件的相关生命周期中通过Bus类的register 函数来注册,然后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 public LocationChangedEvent produceLocationEvent() { // Provide an initial value for location based on the last known position. return new LocationChangedEvent(lastLatitude, lastLongitude); }
该函数的@Produce注解告诉Bus该函数可以产生一个类型为LocationChangedEvent的事件,当有该类型的事件向Bus注册的时候, Bus会调用该函数获取初始值,并使用该值来调用订阅该事件的函数。
而对于需要订阅该事件的地方,通过@Subscribe注解来告诉Bus:
@Subscribe public void onLocationChanged(LocationChangedEvent event) { locationEvents.add(0, event.toString()); if (adapter != null) { adapter.notifyDataSetChanged(); } }
需要注意的是,不管是生产者还是订阅者都需要向Bus注册自己:
bus.register(this);
如果您认为在每个Activity或者Fragment的onResume和onPause函数中都需要调用bus.register(this)和bus.unregister(this)函数比较麻烦的话,可以通过一个Bus包装类来自动
完成注册的工作,然后在您的类中只需要继承基类,并调用函数getScopedBus().register(…) 来注册需要的对象即可。详细情况参考示例代码:https://gist.github.com/3057437
执行线程
Otto的事件调用默认是在主线程(应用的UI线程)中调用,
// 下面两种声明方式是一样的效果.Bus bus1 = new Bus();Bus bus2 = new Bus(ThreadEnforcer.MAIN);
如果您不关注在那个线程中执行事件函数,则可以通过 ThreadEnforcer.ANY 参数来初始化Bus对象,
如果上面2个线程控制方式满足不了您的需求,您还可以通过实现ThreadEnforcer接口来定义自己的线程模型、
或者使用EventBus类库,我们将在下一篇文章中介绍EventBus和Otto的区别。
Read more: http://blog.chengyunfeng.com/?p=450#ixzz2mbSOkNrD
- Otto介绍
- Otto介绍
- Otto介绍
- Otto介绍
- Otto介绍
- OTTO框架使用介绍。
- OTTO-EVENTBUS
- otto学习
- EventBus & Otto
- Otto学习
- 事件总线框架---Otto,总线框架---otto
- Android Otto框架浅析
- Android Otto框架浅析
- otto源码分析
- 事件总线框架---Otto
- Android Otto框架浅析
- Otto使用入门
- Otto源码分析
- activity属性设置大全
- python快速使用(一)概要
- 在用android的Canvas画图时,调用Canvas.setBitmap方法报错,IllegalStateException
- Java中如何遍历Map对象的4种方法
- Consumable Media Types
- Otto介绍
- bisection bandwidth
- iPhone屏幕尺寸、分辨率及适配
- HDU 4291 A Short problem // 矩阵快速幂, 循环节
- 面试题:阿里 天猫积分换魔盒
- 多线程:线程状态、synchronized关键字、读写锁、条件对象、Volatile、阻塞队列等小结
- Take me to your heart-Michael Learns To Rock
- C#学习之Foreach
- intellij idea 必知的debug功能