如何使用异步事务关闭领域实例

我在理解什么是关闭Realm实例的良好做法时遇到问题,无论何时运行异步事务。

在我的应用程序中,我有很多控制器,并且我不会从活动中传入Realm实例,而是每次需要时都会创建一个新实例,并在完成工作后尽快关闭它。

但是最近我发现它不能正常工作,如果我在运行异步事务时关闭领域实例。

Realm cacheRealm = RealmDelegate.getCacheRealm();

cacheRealm.executeTransaction(realm -> {
    doSomeWork(response);
    realm.copyToRealmOrUpdate(response);
}, callback);
cacheRealm.close();

上面的代码有一个大问题,那就是从未启动回调,因为我在交易完成之前关闭领域实例。

因此我不知道我该如何处理这种情况。 我是否应该从活动或片段将Realm对象的实例传递给每个控制器,并仅在那里处理关闭领域实例? 或者也许还有其他更优雅的解决方案来解决这个问题?

另外我想知道的是发生了什么,如果我不关闭Realm db,并且有办法检查Realm的所有实例是否已关闭?


您可以在回调中关闭领域吗? 你有一个错误和成功回调挂钩到:https://realm.io/docs/java/latest/#asynchronous-transactions

realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            User user = bgRealm.createObject(User.class);
            user.setName("John");
            user.setEmail("john@corporation.com");
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            // Transaction was a success.
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            // Transaction failed and was automatically canceled.
        }
    });
链接地址: http://www.djcxy.com/p/90261.html

上一篇: how to close realm instance with async transaction

下一篇: How to find pending migrations for EntityFramework