如何用RxJava替代EventBus进行事件的分发?

为什么要停止使用EventBus?下面这个GitHub上项目提到了EventBus的一些不足之处。

https://github.com/hehonghui/android-tech-frontier/blob/master/issue-16/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%A0%E5%BA%94%E8%AF%A5%E5%81%9C%E6%AD%A2%E4%BD%BF%E7%94%A8EventBus.md

本篇文章讲解如何用RXJava替代EventBus进行事件的分发。

下面讲解的是RXjava是什么?以及如何应用到项目中。

http://gank.io/post/560e15be2dca930e00da1083

正文:如何用RXjava替代EventBus进行事件的分发

这是GitHub上的Demo

https://github.com/kaushikgopal/RxJava-Android-Samples

定义一个类

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
// this is the middleman object
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;
  }
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了,现在你有一个EventBus准备好用了。

下面显示如何将一个Event发布到Bus上

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1
2
3
4
5
@OnClick(R.id.btn_demo_rxbus_tap)
public void onTapButtonClicked() {

    _rxBus.send(new TapEvent());
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面显示你如何在Activity,Fragment,Service中监听Bus上的Event

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// note that it is important to subscribe to the exact same _rxBus instance that was used to post the events
_rxBus.toObserverable()
    .subscribe(new Action1<Object>() {
      @Override
      public void call(Object event) {

        if(event instanceof TapEvent) {
          _showTapText();

        }else if(event instanceof SomeOtherEvent) {
          _doSomethingElse();
        }
      }
    });
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DEAD EVENTS

如果应用程序处于打开状态(因此有至少1或更多听众的总线)我们不发送推送通知,但如果他们有应用程序在后台,然后我们发送聊天消息的推送通知,让他们知道聊天消息。

如果一个事件发送到Bus上,并且没有Listeners监听,那么一个DEAD EVENTS就会被返回。这样的话监听这个DEAD EVENTS就会显得非常重要了。当应用在background时候发送通知而不是在foreground的时候发送通知,这种情况用RxJava如何实现呢?

很简单,hasObservers()这个方法可以准确的告诉我们。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值