来一个最基本的测试
在主线程中做如下操作
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