私のアプリケーションでは、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()
を複数回、データベースの異なるテーブルへの複数回の書き込みの間に複数回使用することは問題ありませんか?助言がありますか?それはそうAndroidのライブラリからいくつかのサンプルコードを引っ張る