RxBus聽名字就知道與RxJava和EventBus有關(guān)啦
沒錯(cuò)這其實(shí)是他們的結(jié)合體
其實(shí)寫一個(gè)簡單版的也真心不難,RxBus的代碼只有十幾行,沒聽錯(cuò)真的只有十幾行
不過首先你要了解RxJava和EventBus的大概用法,RxJava不用多說,至于EventBus的話他的思想主要就是你在某個(gè)地方發(fā)送一個(gè)Event,然后在另一個(gè)地方接收這個(gè)Event,僅此而已。
EventBus在跨組件傳遞數(shù)據(jù)和解耦方面有得天獨(dú)厚的優(yōu)勢,這些你接觸多久知道了。
現(xiàn)在開講
1.首先導(dǎo)入rxandroid的包
compile 'io.reactivex:rxandroid:1.0.1'
2.開始寫我們的核心RxBus
public class RxBus {
private static RxBus rxBus=new RxBus();
public static RxBus getRxBusInstance(){
return rxBus;
}
private final Subject bus;
// PublishSubject只會把在訂閱發(fā)生的時(shí)間點(diǎn)之后來自原始Observable的數(shù)據(jù)發(fā)射給觀察者
public RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
// 提供了一個(gè)新的事件
public void post (Object o) {
bus.onNext(o);
}
// 根據(jù)傳遞的 eventType 類型返回特定類型(eventType)的 被觀察者
public <T> Observable<T> toObserverable (Class<T> eventType) {
return bus.ofType(eventType);
}
}
3.發(fā)送一個(gè)Event
RxBus.getRxBusInstance().post(new TapEvent(i));
4.接收Event
//subscription是類型為Subscription全局,通常在onDestroy里unsubscribe
subscription=RxBus.getRxBusInstance().toObserverable(TapEvent.class)
.subscribe(new Subscriber<TapEvent>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(TapEvent tapEvent) {
int n=tapEvent.n;
tvTap.setText(n+"");
}
});
5.取消訂閱
如果不想在某個(gè)地方繼續(xù)收到Event可以unsubscribe掉那個(gè)subscription
通常放在onDestory里
@Override
public void onDestroy() {
super.onDestroy();
if (!subscription.isUnsubscribed()){
subscription.unsubscribe();
}
}
我還進(jìn)行了Activity和service的通訊
效果如下
這里寫圖片描述