你的位置:首页 > 软件开发 > 操作系统 > Android 中 EventBus 的使用(2):缓存事件

Android 中 EventBus 的使用(2):缓存事件

发布时间:2015-11-17 17:01:20
在上一篇文章中,我曾提到我所选择的是Green Robot提供的EventBus(Android平台),而且这并非只是我一个人的选择。在最近一次查看中,我发现选择它的人数已经是Otto(由Jake Wharton和其他大神们在Square上所提供的版本)的两倍之多了。GR的版本显 ...

在上一篇文章中,我曾提到我所选择的是Green Robot提供的EventBus(Android平台),而且这并非只是我一个人的选择。在最近一次查看中,我发现选择它的人数已经是Otto(由Jake Wharton和其他大神们在Square上所提供的版本)的两倍之多了。GR的版本显然比Otto有更多的性能提升,但最令我动心的地方在于它添加了很多新功能。今天我就打算谈谈其中的一项:通过sticky事件进行事件缓存。

sticky是什么?

sticky事件就是指在EventBus内部被缓存的那些事件。EventBus为每个类(class)类型保存了最近一次被发送的事件——sticky。后续被发送过来的相同类型的sticky事件会自动替换之前缓存的事件。当一个监听者向EventBus进行注册时,它可能会去请求这些缓存事件。这时,所有已缓存的事件就会立即自动发送给这个监听者,就象这些事件又重新刚被发送了一次一样。这就意味着,一个监听者可以收到在它注册之前就已经被发送到EventBus中的事件(甚至是在这个监听者的实例被创建出来前,这一点是不是很奇妙)。这一强大功能将有助于我们解决某些固有的问题,如Android上跨Activity和Fragment生命周期传递数据这种复杂问题,异步调用等等。

使用sticky public class ItemSelectedEvent {

然后在List组件(ItemListFragment.java)的listItemClick方法里发送一个sticky事件:

  @Override

接下来,Detail组件(ItemDetailFragment.java)注册接收sticky事件,并定义一个ItemSelectedEvent的处理方法。当收到事件时,查询并显示被选中项的详细信息:

  @Override

最后,在Main组件(MainActivity.java)中将所有内容集合到一起。Activity自身注册监听sticky事件,并创建与Detail组件一样的ItemSelectedEvent处理方法。当收到事件时,根据当前页面布局(layout)决定将Detail fragment加载哪个合适的容器中。

  @Override

注意,这个activity不仅监听sticky事件,还发送了另外一个sticky事件用来传递当前屏幕模式。这一事件随后会被List fragment(ItemListFragment.java)收到,并且根据条件对列表进行设置:

  public void onEvent(LayoutEvent event) {

另外可以看到,没有一个组件要去实现onSaveInstanceState(Bundle bundle)以及onRestoreInstanceState(Bundle bundle)方法。取而代之的是它们只需简单地依赖于在registerSticky(this)时自动发送的缓存事件。所以,当用户选择一个项目并且在查看详细信息时,以下情况便会在配置改变时自动发生:

  1. 在onPause时,每个组件都会将自身从EventBus注销掉。
  2. Main activity重启并在它的onResume方法里注册监听sticky事件。
  3. 缓存的ItemSelectedEvent被发送到Main activity,然后Detail fragment被加载。
  4. Detail fragment的onResume被调用并且接收到ItemSelectedEvent,从而使得被选中项目的详细信息被显示出来。
  5. 此外,List fragment的onResume被调用并且收到ItemSelectedEvent和LayoutEvent,然后根据当前布局正确地显示被选中项目。

希望这篇文章对你能有帮助。如之前提到的,所有的示例代码都可以在这里访问到:https://github.com/wongcain/EventBus-Config-Demo/

下一篇将是有关EventBus系列教程的最后一篇, 我将谈一谈在EventBus中有关跨越多线程和进程的有关内容。

全能程序员交流QQ群290551701,聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!


原标题:Android 中 EventBus 的使用(2):缓存事件

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录