如何用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()这个方法可以准确的告诉我们。


你可能感兴趣的:(EventBus,rxjava)