如何在Android上处理Realm事务

时间:2017-02-27 20:10:40

标签: android realm realm-java

在几个示例代码中,我看到过这样的模式:

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?如果没有,会出现什么问题?

1 个答案:

答案 0 :(得分:1)

您可以使用executeTransaction(Realm.Transaction)方法在出错时自动取消同步事务。

try(Realm r = Realm.getDefaultInstance()) {
    r.executeTransaction((realm) -> {
        workWithRealmData();
    });
}