您在下面看到的是稍微修改过的代码版本,其中getMessagesFromDb()
调用了将返回值分配给变量:
Object data = getMessagesFromDb();
Observable.just(data).
subscribeOn(Schedulers.newThread()).
observeOn(AndroidSchedulers.mainThread()).
subscribe(incomingMessages -> {
//do something
});
这正是它的Observable.just
工作原理,并且getMessagesFromDb()
确实在主线程中被调用(就像你在主线程中调用它一样)。
您必须使用Observable.fromCallable
以下方法推迟它:
Observable.fromCallable(() -> getMessageFromDb()).
subscribeOn(Schedulers.newThread()).
observeOn(AndroidSchedulers.mainThread()).
subscribe(incomingMessages -> {
//do something
});
请注意,您可以使用Observable.defer
代替Observable.fromCallable
,但它有点复杂:
Observable.defer(() -> Observable.just(getMessageFromDb()))
此响应的先前版本使用Observable.create
. 但是用这种方法构建一个 Observable 是很复杂的。尝试总是喜欢Observable.defer
或Observable.fromCallable