RxJava 異步任務(wù)操作毕箍,核心功能在于對(duì)線程的控制與調(diào)度残邀,Android 編程中更新 UI 必須在主線程瘪匿。線程調(diào)度關(guān)鍵字 subscribeOn()
「設(shè)置被觀察者線程」判耕、observeOn()
「設(shè)置觀察者線程透绩,默認(rèn)參數(shù)observeOn(AndroidSchedulers.mainThread() )
」
RxJava 內(nèi)置線程:
-
Schedulers.io()
代表io操作的線程, 通常用于網(wǎng)絡(luò),讀寫(xiě)文件等io密集型的操作 -
AndroidSchedulers.mainThread()
代表Android的主線程 -
Schedulers.newThread()
代表一個(gè)常規(guī)的新線程 -
Schedulers.computation()
代表CPU計(jì)算密集型的操作, 例如需要大量計(jì)算的操作
偽代碼參考
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())//設(shè)置被觀察在子線程工作
.observeOn(AndroidSchedulers.mainThread())//設(shè)置觀察者在主線程操作
.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: ");
}
});