码迷,mamicode.com
首页 > 其他好文 > 详细

Otto:EventBus

时间:2014-07-29 12:03:16      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:android   http   使用   os   io   2014   for   cti   

OttoEventBus

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或者FragmentonResume中注册监听器,在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,布布扣,bubuko.com

Otto:EventBus

标签:android   http   使用   os   io   2014   for   cti   

原文地址:http://www.cnblogs.com/leo-lsw/p/otto.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!