在哪里订阅findAllAsync()。asObserable()而不阻塞UI线程?

时间:2017-01-06 10:20:24

标签: android multithreading realm rx-java

我想在领域中使用findAllAsync()。asObservable()。我使用的领域对象是在应用程序类中创建的全局实例。问题是observable必须在UI Thread上订阅,因为你不能将realm对象从一个线程移动到另一个线程,并且UI线程被阻塞直到findAllAsync完成。所以我的问题是我应该如何实现我的领域逻辑和rx逻辑来解决这个问题?

1 个答案:

答案 0 :(得分:0)

findAllAsync()不会被屏蔽。这就是为什么它首先被称为async

但是,如果您获得结果集并开始映射整个列表,那么您将需要读取每个元素,这会抛出延迟加载。

Subscription subscription = realm.where(Blah.class) 
                              .findAllAsync()
                              .asObservable()
                              .filter(RealmResults::isLoaded)
                              //.map() <-- no map!
                              //.map(Realm::copyFromRealm) <-- NO copy from realm!
                              .subscribe(...);