标签归档:EventBus

使用 MailOtto 做预加载

最近我开源了一个专注懒事件的事件总线 MailOtto: https://github.com/drakeet/MailOtto 并写了一个用它来做预加载的实践案例:第一个页面预先为第四个页面发起数据加载请求,等用户进入第四个页面,那加载好的数据才会分发给它,若在数据下来前进入第四个页面,也会等完成的时候自动接收到。

这个数据需要 8 秒,如果进入到第四个页面才开始加载,体验就很不好,就算只要 1 秒,也会有一个文本从无到有闪动的过程。如果在第一个页面停留超过 8 秒,它足够完成全程预加载,进入第四个页面里面就能直接拿到数据,可谓完美预加载。

本文就是来介绍一下这个实践案例。
继续阅读

翻译:通过 RxJava 实现一个 Event Bus – RxBus

原文:Implementing an Event Bus With RxJava – RxBus

这篇文章有三个部分:

  1. 关于什么是 Event Bus(事件总线)的快速指引(不译)
  2. 通过 RxJava 实现一个 RxBus
  3. 对于文章所题的这种方式的一些疑惑和回答

一、什么是 Event Bus(事件总线)

这部分由于篇幅太长,并且不是关键,所以略去,关于这部分,我假设你已经懂得了,如果不懂,可以看看 Square 的 Otto 或者 GreenRobot 的 EventBus,再或者你可以看看 妹纸&gank.io 的源代码,这个项目使用到了 Otto 和 RxJava。

二、通过 RxJava 实现一个 RxBus

我已经发布了这个 使用 RxJava 的例子了: 一个使用 RxJava for Android 的教程 ,所以我在这里继续来解释 RxBus 的完整实现。这是其中有趣部分的实现:

// 这是作为中间人调用的对象
public class RxBus {

  private final Subject<Object, Object> _bus = new SerializedSubject<>(PublishSubject.create());

  public void send(Object o) {
    _bus.onNext(o);
  }

  public Observable<Object> toObserverable() {
    return _bus;
  }
}

这样就可以了,看得出我们已经有一个 Event Bus 可以使用啦,接下来就是使用方式的介绍:

通过这个 bus 发布一个事件:

@OnClick(R.id.btn_demo_rxbus_tap)
public void onTapButtonClicked() {

    _rxBus.send(new TapEvent());
}

在其他 Fragment 或者 Service 等地方监听这个事件:
继续阅读