在我的應用程序中,我使用AsyncTask
將一些數據寫入事務中的數據庫。這個數據庫也可以從UI線程訪問。在查看可用的數據庫方法時,我遇到了yieldIfContendedSafely()
。似乎這種方法應該用於從單獨的線程進行交易的任何情況。但除此之外幾乎沒有關於此方法的任何文檔:在Android多線程應用程序中正確使用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()
是否可以在對數據庫中不同表的多次寫入之間使用?有什麼建議麼?