Dans mon application, j'utilise un AsyncTask
pour écrire des données dans une base de données dans une transaction. Cette base de données est également accessible depuis le thread UI. Tout en regardant à travers les méthodes de base de données disponibles, je suis tombé sur yieldIfContendedSafely()
. Il semble que cette méthode devrait être utilisée pour tous les cas où une transaction est faite à partir d'un thread séparé. Mais il n'y a pratiquement aucune documentation sur cette méthode autre que la suivante:Utilisation correcte de yieldIfContendedSafely() dans une application multithread Android
Termine temporairement la transaction pour laisser les autres threads s'exécuter. La transaction est considérée comme réussie jusqu'à présent. N'appelez pas
setTransactionSuccessful
avant de l'appeler. Lorsque cela retourne une nouvelle transaction aura été créée mais pas marquée comme réussie. Cela suppose qu'il n'y a pas de transactions imbriquées (beginTransaction
n'a été appelée qu'une seule fois) et émettra une exception si ce n'est pas le cas.
Voici comment je suppose que vous utilisez cette méthode à partir d'un fil:
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();
}
Est-ce la bonne façon d'utiliser cette méthode? Est-il correct d'utiliser db.yieldIfContendedSafely()
plus d'une fois dans la même transaction, entre plusieurs écritures à différentes tables dans la base de données? Aucune suggestion?