【发布时间】:2018-01-04 09:31:25
【问题描述】:
我的领域实例有问题。我只使用领域默认实例。对于每个查询/更新操作,我使用 Realm.getDefaultInstance() 获得一个领域实例,并在完成操作后关闭它。
我的问题是其中一个查询是可观察的查询。我只在订阅完成后关闭这个领域实例。同时,其他操作可以关闭其领域实例。我知道领域实例是从缓存中获得的,所以我认为其中一个操作正在关闭我在创建可观察查询时获得的同一个领域实例,因为在一些操作之后,我的可观察查询停止发出项目,并且当我完成我的订阅,我收到一个异常,说我的领域实例已经关闭。它有道理吗?怎样才能避免呢?
我认为这是正在发生的事情:
1. Start observable query -> Realm observable instance opened
2. Start database update 1 -> Realm query1 instance opened
3. Finish database update 1 -> Realm query1 instance closed
...
4. Start database update X -> Realm observable instace opened again <- PROBLEM
5. Finish database update X -> Realm observable instance closed
6. Finish observable query -> Realm observable instance closed again -> EXCEPTION
这是我执行可观察查询的代码:
Realm realm = Realm.getDefaultInstance();
return realm.where(Message.class)
.findAll().asObservable()
.filter(RealmResults::isLoaded)
.map(realm::copyFromRealm)
.doOnUnsubscribe(() -> realm.close());
有没有什么办法可以得到一个全新的没有缓存的领域实例,这样没有人可以得到引用并关闭它?
【问题讨论】:
-
您是否考虑过发布真实代码而不是伪代码,以便人们真正看到您在做什么? :P
-
我无法发布任何代码,对不起。我认为这个问题已经足够详细了。
-
I only close this realm instance when the subscription is finished.我需要知道这是怎么做到的,因为这就是你搞砸的地方。 -
好的,我已经用该代码更新了问题。非常感谢。