來一個最基本的測試
在主線程中做如下操作
Log.e(TAG, Thread.currentThread().getName());
Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
Log.e(TAG, "上游線程: " + Thread.currentThread().getName());
e.onNext("1111");
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.e(TAG, "下游線程: " + Thread.currentThread().getName());
}
});
輸出的都是主線程如下
E/MainActivity7: main
E/MainActivity7: 上游線程: main
E/MainActivity7: 下游線程: main
如果做線程調試,使用方法如下
Log.e(TAG, Thread.currentThread().getName());
Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
Log.e(TAG, "上游線程: " + Thread.currentThread().getName());
e.onNext("1111");
}
})
.subscribeOn(Schedulers.io())//這個是給上游配置線程,這裏爲子線程
.observeOn(AndroidSchedulers.mainThread())//這個是給下游配置線程,這裏爲主線程
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.e(TAG, "下游線程: " + Thread.currentThread().getName());
}
});
輸出如下:
E/MainActivity7: main
E/MainActivity7: 上游線程: RxCachedThreadScheduler-1
E/MainActivity7: 下游線程: main
如果上游和下游切換多次呢
Log.e(TAG, Thread.currentThread().getName());
Disposable subscribe = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
Log.e(TAG, "上游線程: " + Thread.currentThread().getName());
e.onNext("1111");
}
})
//Schedulers.io() 代表耗時操作
//Schedulers.newThread()
//Schedulers.computation()cpu大量計算
.subscribeOn(Schedulers.io())//這個是給上游配置線程,這裏爲子線程
.subscribeOn(Schedulers.io())//給上游分配多次,只會在第一次切換
.subscribeOn(AndroidSchedulers.mainThread())//給上游分配多次,只會在第一次切換
.subscribeOn(AndroidSchedulers.mainThread())//給上游分配多次,只會在第一次切換
.observeOn(AndroidSchedulers.mainThread())//這個是給下游配置線程,這裏爲主線程
.observeOn(AndroidSchedulers.mainThread())//給下游分配多次,每次都會切換
.observeOn(Schedulers.io())//給下游分配多次,每次都會切換
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.e(TAG, "下游線程: " + Thread.currentThread().getName());
}
});
}
輸出
E/MainActivity7: main
E/MainActivity7: 上游線程: RxCachedThreadScheduler-3
E/MainActivity7: 下游線程: RxCachedThreadScheduler-4