我用我的應用程序內的境界境界的訪問。當數據加載後,它會經歷強烈的處理,因此處理髮生在後臺線程上。
正在使用的編碼模式是工作單元模式,Realm只存在於DataManager下的存儲庫中。這裏的想法是每個存儲庫可以有不同的數據庫/文件存儲解決方案。
我已經試過
下面是一些類似的代碼,我在我的FooRespository類的例子。
這裏的想法是獲得Realm的一個實例,用於查詢感興趣對象的領域,返回它們並關閉領域實例。請注意,這是同步的,並在最後將對象從Realm複製到非託管狀態。
public Observable<List<Foo>> getFoosById(List<String> fooIds) {
Realm realm = Realm.getInstance(fooRealmConfiguration);
RealmQuery<Foo> findFoosByIdQuery = realm.where(Foo.class);
for(String id : fooIds) {
findFoosByIdQuery.equalTo(Foo.FOO_ID_FIELD_NAME, id);
findFoosByIdQuery.or();
}
return findFoosByIdQuery
.findAll()
.asObservable()
.doOnUnsubscribe(realm::close)
.filter(RealmResults::isLoaded)
.flatMap(foos -> Observable.just(new ArrayList<>(realm.copyFromRealm(foos))));
}
該代碼後面結合經由RxJava使用與重處理代碼:
dataManager.getFoosById(foo)
.flatMap(this::processtheFoosInALongRunningProcess)
.subscribeOn(Schedulers.io()) //could be Schedulers.computation() etc
.subscribe(tileChannelSubscriber);
閱讀該文檔之後,我相信的是,在上述應該工作,因爲它不是異步的,因此不需要循環線程。我在同一個線程中獲得領域的實例,因此它不在線程之間傳遞,也不是對象。
當上面的執行,我得到不正確的線程
境界接入問題
。領域對象只能在創建它們的線程上訪問 。
這看起來不對。我唯一能想到的就是Realm實例池正在讓我使用主線程從另一個進程創建的現有實例。
它會工作,如果你試圖做一些像'Observable.flatMap {dataManager.getFoosById(foo)''? – wint
你的意思是平面圖我張貼在內部的整個鏈或只是第一部分? –
我不是專家,但我認爲你需要從'Schedulers.io'的相同線程獲取Realm對象嗎?大概是這樣 '''Observable.flatMap(dataManager.getFoosById(富)) .flatMap(這:: processtheFoosInALongRunningProcess) .subscribeOn(Schedulers.io())//可能是Schedulers.computation()等 .subscribe (tileChannelSubscriber);''' 雖然 – wint