为什么 Schedulers.io() 有时在主线程中 运行?
Why Schedulers.io() sometimes running in mainthread?
我自己使用 RxAndroid 而不是线程。
我已经在 io 线程上订阅了它,但它有时 运行 在主线程中订阅。
有时日志在主线程中打印。
Observable.from(bitmaps.toArray(new Bitmap[0]))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.zipWith(Observable.range(0, bitmaps.size()), new Func2<Bitmap, Integer, Boolean>() {
@Override
public Boolean call(Bitmap bitmap, Integer i) {
Log.i("==", "" + i);
return true;
}
})
.last()
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
}
});
logcat 中的两个线程:
04-28 14:33:14.696 7215-23795/ Thread: RxCachedThreadScheduler-1
04-28 14:33:19.811 7215-7215/ Thread: main
解决方法:
我将 subscribeOn() 移到 zipWith() 之后 运行 ok.
Observable.from(bitmaps.toArray(new Bitmap[0]))
.zipWith(Observable.range(0, bitmaps.size()), new Func2<Bitmap, Integer, Boolean>() {
@Override
public Boolean call(Bitmap bitmap, Integer i) {
Log.i("==", "" + i);
return true;
}
}).subscribeOn(Schedulers.io())
.last()
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
}
});
.subscribeOn - 在哪里回答
.observeOn - 进位
.subscribeOn(AndroidSchedulers.mainThread())
是的,这是预期的行为。
永远记住这个经验法则,
subscribeOn() always affects operators upstream to it and observerOn()
always affects operators downstream to it.
因此,当您将 subscribeOn()
移动到 zip()
下方时,它会使上游 运行 位于 Schedulers.io()
。
您还应该使用 observeOn() 来观察主线程上的结果,并根据需要对 UI 进行更改。
我自己使用 RxAndroid 而不是线程。 我已经在 io 线程上订阅了它,但它有时 运行 在主线程中订阅。 有时日志在主线程中打印。
Observable.from(bitmaps.toArray(new Bitmap[0]))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.zipWith(Observable.range(0, bitmaps.size()), new Func2<Bitmap, Integer, Boolean>() {
@Override
public Boolean call(Bitmap bitmap, Integer i) {
Log.i("==", "" + i);
return true;
}
})
.last()
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
}
});
logcat 中的两个线程:
04-28 14:33:14.696 7215-23795/ Thread: RxCachedThreadScheduler-1
04-28 14:33:19.811 7215-7215/ Thread: main
解决方法: 我将 subscribeOn() 移到 zipWith() 之后 运行 ok.
Observable.from(bitmaps.toArray(new Bitmap[0]))
.zipWith(Observable.range(0, bitmaps.size()), new Func2<Bitmap, Integer, Boolean>() {
@Override
public Boolean call(Bitmap bitmap, Integer i) {
Log.i("==", "" + i);
return true;
}
}).subscribeOn(Schedulers.io())
.last()
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
}
});
.subscribeOn - 在哪里回答 .observeOn - 进位
.subscribeOn(AndroidSchedulers.mainThread())
是的,这是预期的行为。
永远记住这个经验法则,
subscribeOn() always affects operators upstream to it and observerOn() always affects operators downstream to it.
因此,当您将 subscribeOn()
移动到 zip()
下方时,它会使上游 运行 位于 Schedulers.io()
。
您还应该使用 observeOn() 来观察主线程上的结果,并根据需要对 UI 进行更改。