首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Realm -如何使用异步事务关闭realm实例

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

Stack Overflow用户
提问于 2016-02-15 12:53:52
回答 1查看 5.9K关注 0票数 8

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

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

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

代码语言:javascript
复制
Realm cacheRealm = RealmDelegate.getCacheRealm();

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

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

因此,我不确定我应该如何处理这种情况。我是否应该将Realm对象的实例从activity或fragment传递到每个控制器,并仅在那里处理realm实例的关闭?或者可能有其他更优雅的解决方案来解决这个问题?

另外,我想知道的另一件事是,如果我不关闭Realm db会发生什么,是否有一种方法可以检查Realm的所有实例是否都已关闭?

EN

回答 1

Stack Overflow用户

发布于 2016-02-15 14:22:15

你可以在回调中关闭领域吗?您有一个error和success回调要挂接到:https://realm.io/docs/java/latest/#asynchronous-transactions

代码语言:javascript
复制
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.
        }
    });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35401719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档