添加依赖 implementation ‘com.trello.rxlifecycle2:rxlifecycle:2.2.1’ implementation ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle:2.2.1’在rxlifecycle依赖包下游如下几个关键类RxLifecycleLifecycleProviderLifecycleTransformaer在rxlifecycle-android-lifecycle依赖包下有如下几个关键类AndroidLifecycleRxLifecycleAndroidLifecycle不直接使用RxLifecycle,而是使用AndroidLifecycle.如何创建AndroidLifecycle.//AndroidLifecycle.javaLifecycleProvider<Lifecycle.Event> provider = AndroidLifecycle.createLifecycleProvider(this);AndroidLifecycle实现了android.arch.lifecycle.LifecycleObserver.可以通过注解@OnLifecycleEvent来监听对应的Lifecycle.Event. @OnLifecycleEvent(Lifecycle.Event.ON_ANY) void onEvent(LifecycleOwner owner, Lifecycle.Event event) { //向下游传递 lifecycleSubject.onNext(event); if (event == Lifecycle.Event.ON_DESTROY) { //解除观察者 owner.getLifecycle().removeObserver(this); } }这里的lifecycleSubject是一个BehaviorSubject对象.既可以作为观察者,也可以作为被观察对象使用.当监听到对应的Lifecycle.Event时,就会通过lifecycleSubject.onNext(event);向下游传递.在AndroidLifecycle中定义了两个绑定相关的方法.通过这两个绑定方法,将lifecycleSubject与下游连接起来,才能确保lifecycleSubject携带的信息能传递给下游. /** * 绑定某个具体的生命周期环节 * event具体为 * ON_CREATE * ON_START * ON_RESUME * ON_PAUSE * ON_STOP * ON_DESTROY * ON_ANY / public <T> LifecycleTransformer<T> bindUntilEvent(@NonNull Lifecycle.Event event) { return RxLifecycle.bindUntilEvent(lifecycleSubject, event); } /* * 绑定到生命周期 */ public <T> LifecycleTransformer<T> bindToLifecycle() { return RxLifecycleAndroidLifecycle.bindLifecycle(lifecycleSubject); }第一个方法使用到了RxLifecycle.bindUntilEvent方法.public static <T, R> LifecycleTransformer<T> bindUntilEvent(@Nonnull final Observable<R> lifecycle, @Nonnull final R event) { checkNotNull(lifecycle, “lifecycle == null”); checkNotNull(event, “event == null”); return bind(takeUntilEvent(lifecycle, event)); }这里的takeUntilEvent方法是判断lifecycle所携带的event是否与参数event一致.bind方法源码如下: public static <T, R> LifecycleTransformer<T> bind(@Nonnull final Observable<R> lifecycle) { return new LifecycleTransformer<>(lifecycle); }创建了一个LifecycleTransformer对象.public final class LifecycleTransformer<T> implements ObservableTransformer<T, T>, FlowableTransformer<T, T>, SingleTransformer<T, T>, MaybeTransformer<T, T>, CompletableTransformer{ final Observable<?> observable; LifecycleTransformer(Observable<?> observable) { checkNotNull(observable, “observable == null”); this.observable = observable; } @Override public ObservableSource<T> apply(Observable<T> upstream) { return upstream.takeUntil(observable); } @Override public Publisher<T> apply(Flowable<T> upstream) { return upstream.takeUntil(observable.toFlowable(BackpressureStrategy.LATEST)); } @Override public SingleSource<T> apply(Single<T> upstream) { return upstream.takeUntil(observable.firstOrError()); } @Override public MaybeSource<T> apply(Maybe<T> upstream) { return upstream.takeUntil(observable.firstElement()); } @Override public CompletableSource apply(Completable upstream) { return Completable.ambArray(upstream, observable.flatMapCompletable(Functions.CANCEL_COMPLETABLE)); } }先说一下takeUntil操作符的作用. ObservableA.takeUntil(ObservableB);当ObservableB开始发射数据,ObservableA停止发射数据.那么对于LifecycleTransformer,当observable开始发射数据,upstream就会停止发射数据.这里的observable就是AndroidLifecycle中的BehaviorSubject.而upstream就是我们自己的数据源.LifecycleTransformer通过与RxJava2的操作符compose结合使用. val lifecycleProvider = AndroidLifecycle.createLifecycleProvider(this)observable.compose(lifecycleProvider.bindUntilEvent(Lifecycle.Event.ON_DESTROY))