在几个示例代码中,我看到过这样的模式:
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
workWithRealmData();
realm.commitTransaction();
}
问题是 - 这样安全吗?如果“workWithRealmData()”函数抛出异常,则不会取消该事务。但是,无论如何我们都在试用资源的最后阶段关闭了这个领域。
更安全的构造可能如下所示:
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
try {
workWithRealmData();
realm.commitTransaction();
} finally {
if (realm.isInTransaction()) {
realm.cancelTransaction();
}
}
}
看起来更安全 - 但对所有来电的代码看起来也显得更加糟糕。
所以真的可以归结为 - 如果Realm之后立即关闭,是否可以安全地忽略cancelTransaction?如果没有,会出现什么问题?
答案 0 :(得分:1)
您可以使用executeTransaction(Realm.Transaction)
方法在出错时自动取消同步事务。
try(Realm r = Realm.getDefaultInstance()) {
r.executeTransaction((realm) -> {
workWithRealmData();
});
}