Android事件驱动编程(二)

771 查看

前篇文章我们简短地介绍了事件驱动编程。现在我们看下EventBus中进行这些基本操作的实例代码。

首先,我将展示事件驱动编程中扮演中心角色的实体。参考从EventBus仓库中取得的图片。

一个事件总线(Event Bus)。这是连接其他实体的中心通信通道。

一个事件(Event)。这是发生的动作,字面上可以是任何东西(应用启动,收到数据,用户交互…)。

一个订阅者订阅者监听事件总线。如果检测到事件发生,它将会触发。

一个发布者,将事件发送到事件总线

有代码有真相,下面看下一个简单例子:

  • 应用加载两个fragment。
  • 第二个片段包含一个TextView,按钮点击时将会更新。
  • 新的Fragment加到场景中时,ActionBar标题会变化。

宿主Activity

宿主Activity需要在onCreate方法中注册EventBus。

宿主Activity现在准备好从总线中读取数据了。我们也需要在onDestroy方法中注销总线。

Activity可以捕获两种不同事件:一个更新ActionBar标题,另一个加载第一个fragment。我们写两个onEvent来处理事件:

事件

每个事件都需要在类中声明。事件中可以包含变量。

碎片

现在我们需要创建fragment。第一个fragment包含一个按钮,可以打开第二个;第二个包含一个按钮,点击会更新TextView。片段也需要注册和注销EventBus,为了结构更简洁,所有的东西将会封装在一个BaseFragment中。

现在我们来创建更多动作。第一个Fragment将会打开第二个,函数如下:

注意,这里我使用了ButterKnife表示法。它可以生成更简洁的代码,如果你还没用过,现在开始用吧。

第二个Fragment中的按钮将会向EventBus发送一个事件来改变TextView。

第二个Fragment也需要监听这个事件,这样它收到事件时,可以相应改变文本。

我们创建了一个包含两个Fragment的基本应用,它们通过事件通信,其中一个通过事件来更新。我已经把代码提交到GitHub上,你可以检出看看。

关键问题是怎么提升一个事件驱动架构。下篇文章我将提出一个简洁易懂的架构,来支持Anroid中的事件驱动编程。