由于rx是从下到上的执行onsubscribe()方法,然后再自上到下的执行subscribe()方法,而rxlifecycle是使用takeUntil方法来停止消息,只能终止当前的上一个onsubscribe()方法的调用,所以顺便不同会出现以下问题
坑1
Observable.just("hello world!")
.compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))
.flatMap(new Func1<String, Observable<Long>>() {
@Override
public Observable<Long> call(String s) {
return Observable.interval(1, TimeUnit.SECONDS);
}
})
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i(TAG, "....oh,oh,no!!..........." + aLong);
}
});
activity生命周期paused的时候
Log.i(TAG, "....oh,oh,no!!..........." + aLong);
还会执行么??会会...
如果你想全部都不执行:
Observable.just("hello world!")
.flatMap(new Func1<String, Observable<Long>>() {
@Override
public Observable<Long> call(String s) {
return Observable.interval(1, TimeUnit.SECONDS);
}
})
//fuck....here
.compose(this.<Long>bindUntilEvent(ActivityEvent.PAUSE))
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i(TAG, "....oh,oh,no!!..........." + aLong);
}
});
坑2
Observable.interval(1, TimeUnit.SECONDS)
.doOnUnsubscribe(new Action0() {
@Override
public void call() {
Log.i(TAG, "Unsubscribing subscription ......");
}
})
.doOnNext(new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.i(TAG, "........fuck..........." + aLong);
}
})
.flatMap(new Func1<Long, Observable<String>>() {
@Override
public Observable<String> call(Long aLong) {
return Observable.just(aLong + "");
}
})
.compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))
.subscribe(new Action1<String>() {
@Override
public void call(String num) {
Log.i(TAG, "..........shit..........." + num);
}
});
activity在paused的时候,
Log.i(TAG, "........fuck..........." + aLong);
Log.i(TAG, "..........shit..........." + num);
都不会执行...
而且会unsubscribe