6

我的应用程序使用远程 REST API 并使用 greenDao 填充本地数据库。我有一个 AsyncTask 类的服务:

@Override
protected Void doInBackground(Void... params) {
    insert100RowsIntheFirstTable();
    insert100RowsIntheSecondTable();
}

在每个插入方法中,我都有 insertOrReplaceInTx,我主要使用它来提高性能。

如果任何方法无法检索数据,我需要放弃结果。它应该通过相同的交易来完成。

mDaoSession.callInTx(callable)我想知道在方法内部包含我的插入方法调用是否正确insertOrReplaceInTx。我对吗?

此外,如果引发异常,我如何放弃交易 - 它是通过 greenDao 自动完成的吗?

4

1 回答 1

9

是的,如果您的代码可以抛出异常,请使用 callInTx(如果不是,您也可以考虑 runInTx。Android 的 SQLite API 负责处理那些“嵌套”事务。

毕竟,如果您查看源代码, callInTx 只是一些方便之处:

public <V> V callInTx(Callable<V> callable) throws Exception {
    db.beginTransaction();
    try {
        V result = callable.call();
        db.setTransactionSuccessful();
        return result;
    } finally {
        db.endTransaction();
    }
}
于 2013-01-16T22:04:21.377 回答