如何使用异步事务关闭领域实例
我在理解什么是关闭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