RxJava 异步任务操作,核心功能在于对线程的控制与调度,Android 编程中更新 UI 必须在主线程。线程调度关键字 subscribeOn()
「设置被观察者线程」、observeOn()
「设置观察者线程,默认参数observeOn(AndroidSchedulers.mainThread() )
」
RxJava 内置线程:
-
Schedulers.io()
代表io操作的线程, 通常用于网络,读写文件等io密集型的操作 -
AndroidSchedulers.mainThread()
代表Android的主线程 -
Schedulers.newThread()
代表一个常规的新线程 -
Schedulers.computation()
代表CPU计算密集型的操作, 例如需要大量计算的操作
伪代码参考
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("MrLiu");
emitter.onNext("HelloWord");
emitter.onComplete();
}
}).map(new Function<String, String>() {
@Override
public String apply(String string) throws Exception {
return "Gospell" + string;
}
}).subscribeOn(Schedulers.newThread())//设置被观察在子线程工作
.observeOn(AndroidSchedulers.mainThread())//设置观察者在主线程操作
.doOnNext(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Logger.d(s);
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe: ");
}
@Override
public void onNext(String string) {
Logger.d(string);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: ");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete: ");
}
});