一、引入rxjava
io.reactivex.rxjava2:rxjava:2.1.6
二、创建MyObserver类
public abstract class MyObserver<T> implements Observer<T> {
public abstract void onSuccess(T t);
public abstract void onFail(Throwable e);
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull T t) {
onSuccess(t);
}
@Override
public void onError(@NonNull Throwable e) {
onFail(e);
}
@Override
public void onComplete() {
}
}
三、创建RxScheduler工具类
public class RxScheduler {
public interface IOTask {
void doOnIOThread();
}
public interface UITask {
void doOnUIThread();
}
public static void doOnIOThread(final IOTask task) {
Observable.just(task)
.observeOn(Schedulers.io())
.subscribe(new MyObserver<IOTask>() {
@Override
public void onSuccess(IOTask tioTask) {
tioTask.doOnIOThread();
}
@Override
public void onFail(Throwable e) {
e.printStackTrace();
}
});
}
public static void doOnIOThread(final IOTask ioTask, final UITask uiTask) {
Observable.just(ioTask)
.subscribeOn(Schedulers.io())
.flatMap(new Function<IOTask, ObservableSource<UITask>>() {
@Override
public ObservableSource<UITask> apply(IOTask ioTask) throws Exception {
ioTask.doOnIOThread();
return Observable.just(uiTask);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MyObserver<UITask>() {
@Override
public void onSuccess(UITask task) {
task.doOnUIThread();
}
@Override
public void onFail(Throwable e) {
e.printStackTrace();
}
});
}
public static void doOnUiThread(final UITask task) {
Observable.just(task)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new MyObserver<UITask>() {
@Override
public void onSuccess(UITask tuiTask) {
tuiTask.doOnUIThread();
}
@Override
public void onFail(Throwable e) {
e.printStackTrace();
}
});
}
}