每当我运行异步事务时,我都无法理解关闭Realm实例的好方法。
在我的应用程序中,我有很多控制器,我没有从活动中传入Realm实例,而是每次需要时都会创建一个新的控制器,并在工作完成后立即关闭它。
但是最近我发现它运行不正常,如果我在运行异步事务时关闭了realm实例。
Realm cacheRealm = RealmDelegate.getCacheRealm();
cacheRealm.executeTransaction(realm -> {
doSomeWork(response);
realm.copyToRealmOrUpdate(response);
}, callback);
cacheRealm.close();
上面的代码有一个大问题,即回调永远不会启动,因为我在事务完成之前关闭了realm实例。
因此我不确定我应该怎样处理这种情况。我是否应该将Realm对象的实例从活动或片段传递到每个控制器,并仅在那里处理关闭领域实例?或者也许还有其他更优雅的解决方案来解决这个问题?
另外我想知道的是,如果我不关闭Realm数据库会发生什么,是否有办法检查Realm的所有实例是否已关闭?
答案 0 :(得分:5)
您可以在回调中关闭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.
}
});