RxJava编程:事件总线RxBus
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:
主机:WIN10
开发环境:Android Studio 2.2 Preview 3
RxJava版本:2.0.1
RxAndroid版本:2.0.1
说明:
用RxJava实现事件总线,以下为demo。
源码:
RxBus.Java
package com.bazhangkeji.classroom.common;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
public class RxBus {
private final PublishSubject<Object> _bus = PublishSubject.create();
private RxBus() {
}
private static class RxBusHolder{
private static final RxBus INSTANCE = new RxBus();
}
public static RxBus getInstance(){
return RxBusHolder.INSTANCE;
}
public void send(Object o) {
_bus.onNext(o);
}
public Observable<Object> toObserverable(){
return _bus;
}
public boolean hasObservers(){
return _bus.hasObservers();
}
public <T> Observable<T> toObserverable(Class<T> eventType) {
return _bus.ofType(eventType);
}
}
测试代码:
Disposable disposable = RxBus.getInstance()
.toObserverable(String.class)
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.i(TAG, s);
}
});
RxBus.getInstance().send("hello");
disposable.dispose();
RxBus.getInstance().send("jdh");
RxBus.getInstance().send(100);
jdh和100都并没有打印,因为订阅已经被取消。如果不取消,jdh可以打印,100不能打印,因为类型不匹配。
参考链接:
1.RxJava2-Android-Samples/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java
3.RxBus