android 事件总线 -- Otto(一)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在Android中的各个组件之前有时候经常需要相互访问,我们很多时候可能使用的是实现接口的方式来的,但是这样做耦合性太强了,当量大了的时候,不便于维护和扩展。这个时候可以使用事件总线的机制来实现并解耦,Otto就是Android中的事件总线机制。下面简单介绍一下Otto。</span>

Otto官网地址:http://square.github.io/otto/

Github地址:https://github.com/square/otto

Otto是Android上的一种增强的事件总线,提取自Guaua,用于Android各个部分之间相互关联,并且高度解耦。

使用:


1.创建事件总线。

Bus bus = new Bus();

默认的构造方法,创建的事件总线,是基于主线程的,也就是说,这个时候的执行全部是在主线程中执行的。也可以创建一个基于其它线程的事件总线:

Bus bus = new Bus(ThreadEnforcer.ANY);

2.事件发布:

事件发布是总线中最重要的部分,因为它允许您告诉用户一个动作已经发生。任何类别的实例可在总线上发布,并且只会被发送到该类型的订阅服务器上。

bus.post(produceLocationEvent());

同时注意:事件发布是同步的。


3.订阅:

订阅是事件发布的补充,它可以让您收到事件已发生的通知。订阅事件,用@Subscribe注释方法。该方法只需要一个单一的参数,该参数就是需要订阅的事件类型。

@Subscribe 
public void onLocationCleared(LocationClearEvent event) {
    // 接收到事件通知后,应该做的处理
}
方法名是任意的。使用@Subscribe注释,单一参数,方法使用public修饰。为了接收到事件通知,一个实例类,需要注册事件。如果当前类订阅了事件,可以这样写:

bus.register(this);
不像Guaua事件总线,Otto不会遍历类的层次和从已经注释的类或接口添加方法。这是一个明确的设计决策,以提高性能的库,以及保持您的代码简单和明确。记得在合适的时候调用unregister()方法。


4.生产:

使用@Produce注释方法,创建生产者。该方法不应采取任何参数,其返回类型将被用作事件的类型,它可以产生初始值。

@Produce public LocationChangedEvent produceLocationEvent() {
    // Provide an initial value for location based on the last known position.
    return new LocationChangedEvent(lastLatitude, lastLongitude);
}
跟订阅一样,也需要注册:

bus.register(this);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值