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

每当我运行异步事务时,我都有理解关闭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. } });