RxJava Single.just-in主线程
此代码从主线程开始,但我在RxJava Single.just-in主线程,java,android,rx-java,Java,Android,Rx Java,此代码从主线程开始,但我在Schedulers.io上使用subscribeOn和observeOn disposableBag.add(Single.just(HardOperation.get()) .doOnSuccess(it -> { Log.i("123", Thread.currentThread() + " current"); // Thread[RxCachedThreadScheduler-1,5,main]
Schedulers.io上使用subscribeOn
和observeOn
disposableBag.add(Single.just(HardOperation.get())
.doOnSuccess(it -> {
Log.i("123", Thread.currentThread() + " current"); // Thread[RxCachedThreadScheduler-1,5,main]
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()).subscribe(it -> {
adapter.set(it);
progressBar.setVisibility(View.GONE);
}));
如果我用这个样本
disposableBag.add(Single
.create((SingleOnSubscribe<List<Info>>) emitter -> {
emitter.onSuccess(HardOperation.get());
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(it -> {
adapter.set(it);
progressBar.setVisibility(View.GONE);
}));
disposableBag.add(单个)
.创建((SingleOnSubscribe)发射器->{
onSuccess(HardOperation.get());
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(it->{
适配器。设置(it);
progressBar.setVisibility(View.GONE);
}));
它工作得很好我想你是在问为什么在Single.just()中调用时,硬操作.get()
在主线程上运行
原因是您正在使用Single.just()
创建一个Single
(可观察的的子类)。代码是从内到外、从最里面的表达式到外求值的。因此,HardOperation.get()
在传递给Single.just()
之前首先被调用<代码>硬操作.get()
将需要一段时间来完成并阻止整个程序的执行,然后RxJava才有机会在不同的线程上执行
第二个代码段的区别在于Single.create((SingleOnSubscribe)emitter->{emitter.onSuccess(HardOperation.get());})
通过接收产生或发出HardOperation.get()
的对象来创建Single
。创建此生产者对象很快。请注意,emitter.onSuccess(HardOperation.get())
不会立即调用。
生产者被创建并分配给Single.create()
。RxJava的工作是在另一个线程上调用封装在Single
中的生产者,然后调用HardOperation.get()
而不阻塞。我想你是在问为什么HardOperation.get()
在Single.just()内部调用时在主线程上运行
原因是您正在使用Single.just()
创建一个Single
(可观察的的子类)。代码是从内到外、从最里面的表达式到外求值的。因此,HardOperation.get()
在传递给Single.just()
之前首先被调用<代码>硬操作.get()
将需要一段时间来完成并阻止整个程序的执行,然后RxJava才有机会在不同的线程上执行
第二个代码段的区别在于Single.create((SingleOnSubscribe)emitter->{emitter.onSuccess(HardOperation.get());})
通过接收产生或发出HardOperation.get()
的对象来创建Single
。创建此生产者对象很快。请注意,emitter.onSuccess(HardOperation.get())
不会立即调用。
生产者被创建并分配给Single.create()
。RxJava的工作是在不同的线程上调用封装在单个中的生产者,然后调用硬操作.get()
没有阻塞。那么问题是什么呢?@BorisSafonov为什么我用呢?只是
它在主线程中做什么?那么问题是什么呢?@BorisSafonov为什么我用呢?只是
它在主线程中做什么?回答得好!根据前面的例子,我建议使用Single.fromCallable{}
而不是Single.just()
回答得好!根据上述示例,我建议使用Single.fromCallable{}
而不是Single.just()