Rxjava2 compose

325 阅读1分钟

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))