在几个示例代码中,我看到了如下所示的模式:
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
workWithRealmData();
realm.commitTransaction();
}
问题是——这安全吗?如果“workWithRealmData()”函数抛出异常,事务不会被取消。但无论如何,我们都会在 try-with-resources 的最后阶段关闭 Realm。
更安全的结构可能如下所示:
try (Realm realm = Realm.getDefaultInstance()) {
realm.beginTransaction();
try {
workWithRealmData();
realm.commitTransaction();
} finally {
if (realm.isInTransaction()) {
realm.cancelTransaction();
}
}
}
这看起来更安全 - 但对于所有调用站点的代码看起来也更糟糕。
所以这真的归结为 - 如果 Realm 之后立即关闭,忽略 cancelTransaction 是否安全?如果没有,会出现什么问题?