bas*_*i82 14 java android rx-java2
我想知道是否有人可以对这个问题有所了解,何时使用
__CODE__
代替
__CODE__ ?
来自文档Single.formcallable
Run Code Online (Sandbox Code Playgroud)Single.fromcallable(()-> myObject)
和Single.just的文件
Run Code Online (Sandbox Code Playgroud)Single.Just(myObject)
laa*_*lto 28
通常,当您发出的东西不仅仅是一个对象,而实际上是一些涉及繁重计算,I/O或状态的方法调用的结果时,您会注意到差异.
Single.just(x)x在当前线程中立即对其进行评估,然后x为所有订阅者留下任何结果.
Single.fromCallable(y)y在subscribeOn订阅时调用调度程序中的可调用对象,并为每个用户单独调用.
因此,例如,如果您想将I/O操作卸载到后台线程,则可以使用
Single.fromCallable(() -> someIoOperation()).
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).
subscribe(value -> updateUi(value), error -> handleError(error));
Run Code Online (Sandbox Code Playgroud)
有Single.just()在这里,因为是行不通的someIoOperation()将当前线程上执行.
Ahm*_*mal 15
在你提到的用例中,实际上没有重大区别.
如果我们需要通过函数调用动态创建对象怎么办?
fun getTimeObject() {
val timeInMillis = System.currentTimeMillis()
return TimeObject(timeInMillis)
}
Run Code Online (Sandbox Code Playgroud)
然后,Single.just(getTimeObject())结果Single将Long在有新订户时发出相同的结果.
然而,Single.fromcallable(()-> getTimeObject())由此产生的结果Single将发出不同的信号,Long表示当它有新订户时以毫秒为单位的当前时间.
那是因为fromCallable每次有一个新订阅者Lazily时执行它的lambda .