compose操作符源码比较简单,可是用处很大
public final <R> Observable<R> compose(ObservableTransformer<? super T, ? extends R> composer) {
return wrap(((ObservableTransformer<T, R>) ObjectHelper.requireNonNull(composer, "composer is null")).apply(this));
}
public static <T> Observable<T> wrap(ObservableSource<T> source) {
...
return RxJavaPlugins.onAssembly(new ObservableFromUnsafeSource<T>(source));
}
public final class ObservableFromUnsafeSource<T> extends Observable<T> {
final ObservableSource<T> source;
public ObservableFromUnsafeSource(ObservableSource<T> source) {
this.source = source;
}
@Override
protected void subscribeActual(Observer<? super T> observer) {
source.subscribe(observer);
}
}
比如在Android中经常这样写
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
比如我们写个RxSchedulers类
public class RxSchedulers {
public static final ObservableTransformer schedulersTransformer = new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return upstream
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
代码就可以简化成
compose(RxSchedulers.schedulersTransformer)
配合RxLifecycle可以和Android生命周期进行绑定,降低内存泄漏的风险。
.compose(RxLifecycle.bind(lifecycle))