我使用PublishSubject制作RXBus。 发送邮件时,请致电 subject.onNext 我使用 subject.ofType.doOnNext 进行注册。
然后我发现当我注册一个并发送消息数千次。 它变得非常慢。我添加了一些日志,我知道SubjectObserver太多了。 PublishSubject.onNext中的循环花费了大量时间。
然后我添加一个方法来清除一些用过的主题。
public synchronized State removeFinishObserver(){
SubjectObserver[] a = observers;
SubjectObserver[] b = new SubjectObserver[a.length + 1];
int index = 0;
for(SubjectObserver observer:observers){
LogUtils.d("onNextFinish:" + observer.onNextFinish);
if(!observer.onNextFinish){
b[index] = observer;
index ++;
}
}
SubjectObserver[] c = new SubjectObserver[index];
return new State(terminated, c);
}
但它不能很好地工作,甚至更慢。我没有想法快速制作它。所以我怀疑任何人都可以帮助我。
======================更多====================== / p>
void sendNext();//after several millseconds, receive will happened,maybe timeout
void receive(){
RxBus.getDefault().post(tmp);
}
RxBus.getDefault().toObservable(String.class)
.doOnNext(s -> {
sendNext();
}
})
.timeout(5, TimeUnit.SECONDS)
.doOnError(throwable -> {
if(throwable instanceof TimeoutException){
sendNext();
}
})
.retry();
public class RxBus {
private static volatile RxBus defaultInstance;
private final Subject<Object, Object> bus;
public RxBus() {
bus = new SerializedSubject<>(PublishSubject.create());
}
public static RxBus getDefault() {
if (defaultInstance == null) {
synchronized (RxBus.class) {
if (defaultInstance == null) {
defaultInstance = new RxBus();
}
}
}
return defaultInstance ;
}
public void post (Object o) {
bus.onNext(o);
}
public <T> Observable<T> toObservable (Class<T> eventType) {
return bus.ofType(eventType);
}
}
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.2.3'