Realm - 如何使用异步事务关闭 Realm 实例



每当我运行异步事务时,我都无法理解关闭 Realm 实例的良好做法。

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

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

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

上面的这段代码有一个大问题,即回调永远不会启动,因为我在事务完成之前关闭了 realm 实例。

因此,我

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

我还想知道的另一件事是,如果我不关闭 Realm 数据库,会发生什么,有没有办法检查 Realm 的所有实例是否已关闭?

你可以在回调中关闭 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.
        }
    });

最新更新