我在考虑“Single”这个概念,相比于Observable而言,它较为简单,因为它只能包含一个值(即仅有一次发射)。同样适用于其他类型(Observable、Flowable和Completable)。
Single.fromCallable
Single.fromCallable
实际上是从函数内部的值创建新的Single。这就是Aaron He所说的评论的原因:
fromCallable是一种对Observable.defer(() -> Observable.just(value))的方便方法
它执行了额外的步骤,通过使用“just”创建了一个Observable。如果你调用创建Single的函数时使用了“fromCallable”,你会得到一个嵌套的Single。
val fromCallable: Single<Single<String>> = Single.fromCallable {
Single.just("Example")
}
fun heavyFunction(): String { return "Heavy" }
val fromCallable2: Single<String> = Single.fromCallable {heavyFunction()}
Single.defer
Single.defer
会调用其内部的函数,如果该函数返回一个Single,则您可以稍后使用该Single。否则,它将无法编译。
val defer: Single<String> = Single.defer {
Single.just("Example")
}
Single.defer {heavyFunction()}
val defer2: Single<String> = Single.defer {Single.just(heavyFunction())}
因此,Single.fromCallable从callable创建一个Single,因此得名。这个callable不必创建一个Single,它可以是任何东西。
Defer不创建一个新的Single,它只调用它的主体,应该创建一个Single。这就是为什么它在函数名中没有from的原因。
fromCallable
是一种比较方便的方法,用于将Observable.defer(() -> Observable.just(value))
简化。 - Aaron He