ILifecycleActivity.java 1.8 KB
package com.hjx.parent.rx;

import com.trello.rxlifecycle2.android.ActivityEvent;
import com.trello.rxlifecycle2.android.RxLifecycleAndroid;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Call;

// 抽象
public interface ILifecycleActivity {
    Observable<ActivityEvent> getRxLifecycle();

    default <T> Single<T> getSingleResult(Call<T> call) {
        return Single.just(call)
                .map(t -> t.execute().body())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()));
    }

    default <T> void subscribeSingle(Single<T> single, SingleObserver<T> observer) {
        single.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
                .subscribe(observer);
    }

    default <T> void subscribeRx(Observable<T> observable, Observer<T> observer) {
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
                .subscribe(observer);
    }

    default <T> Disposable subscribeRx(Observable<T> observable, Consumer<T> onNext) {
        return observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
                .subscribe(onNext);
    }
}