私のアプリケーションでAsyncTask
は、トランザクションでデータベースにデータを書き込むために を使用しています。このデータベースは、UI スレッドからもアクセスされます。利用可能なデータベース メソッドを調べているうちに、yieldIfContendedSafely()
. このメソッドは、トランザクションが別のスレッドから行われている場合に使用する必要があるようです。ただし、この方法に関するドキュメントは、次のものを除いてほとんどありません。
トランザクションを一時的に終了して、他のスレッドを実行できるようにします。これまでのところ、トランザクションは成功していると見なされます。
setTransactionSuccessful
これを呼び出す前に呼び出さないでください。これが返されると、新しいトランザクションが作成されますが、成功としてマークされません。これは、ネストされたトランザクションがない (1 回だけ呼び出された) ことを前提としており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()
データベース内の異なるテーブルへの複数の書き込みの間に、同じトランザクションで複数回使用しても問題ありませんか? 助言がありますか?