在我的应用程序中,我使用AsyncTask
一个事务将一些数据写入数据库。这个数据库也可以从 UI 线程访问。在查看可用的数据库方法时,我遇到了yieldIfContendedSafely()
. 似乎这种方法应该用于从单独的线程进行事务的任何情况。但是除了以下内容之外,几乎没有关于此方法的任何文档:
暂时结束事务让其他线程运行。到目前为止,交易被认为是成功的。在调用此之前不要
setTransactionSuccessful
调用。当此返回时,将创建一个新事务,但未标记为成功。这假设没有嵌套事务(beginTransaction
仅被调用一次),如果不是这种情况将抛出异常。
这是我假设您将从线程中使用此方法的方式:
try {
db.beginTransaction();
//insert some stuff into the database here
...
// is this how you use this method?
boolean yielded = db.yieldIfContendedSafely();
if (yielded) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
db.setTransactionSuccessful();
} catch (SQLException e) {
return false;
} finally {
db.endTransaction();
db.close();
}
这是使用此方法的正确方法吗?db.yieldIfContendedSafely()
在同一个事务中,在对数据库中不同表的多次写入之间,是否可以多次使用?有什么建议么?