2017-01-06 29 views
0

我想在領域中使用findAllAsync()。asObservable()。我使用的領域對象是在應用程序類中創建的全局實例。問題是observable必須在UI線程上訂閱,因爲不能將領域對象從一個線程移動到另一個線程,UI線程會被阻塞,直到findAllAsync完成。所以我的問題是我應該如何實現我的領域邏輯和rx邏輯來解決這個問題?在哪裏訂閱findAllAsync()。asObserable()而不阻塞UI線程?

+0

Realm完全有能力在UI線程上查詢合理數量的數據,因爲它是懶惰訪問的。如果你需要更多的信息,請提供一些代碼,因爲它不是很清楚你想實現什麼 – koperko

+0

我想實現的是使用findAllAsync從數據庫讀取數據,然後我想用結果更新UI。我可以使用RealmChangeListener,但使用observable會更好。問題是,如果我使用asObservable,UI線程會被阻塞,直到findAllAsync完成。 –

+0

'findAllAsync'不會阻塞UI線程。從doc - '請注意,查詢沒有被阻塞,並立即返回一個RealmResults ' – Divers

回答

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(...);