android开源项目之OTTO事件总线(一)

Otto是由Square发布的一个着重于Android支持的基于Guava的强大的事件总线,在对应用程序不同部分进行解耦之后,仍然允许它们进行有效的沟通。

开源项目地址:https://github.com/square/otto

使用说明:http://square.github.io/otto/

以下文字来源于官方说明加上自己的体会。

1,使用

创建一个事件总线实例:

Bus bus = new Bus();

因为Bus是唯一有效的(如果它是共享总线),我们建议通过注射或其他适当的方式来获得实例。即使用全局唯一的共享对象

2,发布

事件发布是Bus最重要的组成部分,它允许你告诉subscribers 发生了一个行为。任何类的实例可以发布在Bus总线上,它只会被派遣到subscribers 类型。
发布一个新的事件,调用方法:

bus.post(new AnswerAvailableEvent(42));

发布到总线是一种同步动作,程序同时继续执行,这是保证所有的subscribers 被调用。

3,SUBSCRIBING

订阅是事件发布它让你得到通知,事件已发生的补充。订阅事件,标注方法与“订阅。该方法只需要一个参数,其类型将你想订阅事件。
听事件发表在上一节中我们将需要以下:

@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
    // TODO: React to the event somehow!
}

方法的名称可以是任何你喜欢的东西。注释,单一参数,和公共访问的所有要求。
为了接收事件,一个类的实例需要注册到总线。如果this指的是类的一个实例,作为之前方法的提供者,我们可以使用下面的代码来注册:

bus.register(this);

4,线程的执行
当你用线程接收回调的时候,有时是模糊的,otto提供一个强制机制,确保你总是得到你需要的线程。默认情况下,所有相互作用的实例是限于主线程。

// Both of these are functionally equivalent.
Bus bus1 = new Bus();
Bus bus2 = new Bus(ThreadEnforcer.MAIN);

如果你不关心,线程的交互发生,实例化一个总线实例就行。如果你需要额外的功能或验证,可以自己实现threadenforcer接口。

原文地址:https://www.cnblogs.com/zkp2010/p/3725437.html