在我的应用程序中,我使用a 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();
}
Run Code Online (Sandbox Code Playgroud)
这是使用此方法的正确方法吗?是否可以db.yieldIfContendedSafely()在同一个事务中多次使用,在多次写入数据库中的不同表之间?有什么建议?