zoukankan      html  css  js  c++  java
  • 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接口。

  • 相关阅读:
    [BZOJ1294][SCOI2009]围豆豆Bean 射线法+状压dp+spfa
    [BZOJ1060][ZJOI2007]时态同步 树形dp
    [BZOJ1082][SCOI2005]栅栏 二分+搜索减枝
    [BZOJ1055][HAOI2008]玩具取名 区间dp
    [BZOJ1070][SCOI2007]修车 费用流
    [LeetCode 560] Subarray Sum Equals K
    Line of wines
    [LeetCode 1197] Minimum Knight Moves
    [Daily Coding Problem 293] Minimum Cost to Construct Pyramid with Stones
    [Daily Coding Problem 294] Shortest round route with rising then falling elevations
  • 原文地址:https://www.cnblogs.com/zkp2010/p/3725437.html
Copyright © 2011-2022 走看看