En mi aplicación, estoy usando un AsyncTask
para escribir algunos datos en una base de datos en una transacción. También se accede a esta base de datos desde el hilo de la interfaz de usuario. Al mirar a través de los métodos de base de datos disponibles, me encontré con yieldIfContendedSafely()
. Parece que este método se debe usar para cualquier caso en el que se realice una transacción desde un hilo separado. Pero apenas hay documentación sobre este método que no sea la siguiente:Uso adecuado de yieldIfContendedSafely() en una aplicación multiproceso de Android
Finalice temporalmente la transacción para permitir que se ejecuten otros subprocesos. Se supone que la transacción fue exitosa hasta el momento. No llame al
setTransactionSuccessful
antes de llamar a esto. Cuando esto vuelva, se habrá creado una nueva transacción pero no se marcará como exitosa. Esto supone que no hay transacciones anidadas (solo se ha llamado albeginTransaction
una vez) y lanzará una excepción si ese no es el caso.
Así es como yo asumiría que utilizaría este método de un hilo:
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();
}
¿Es esta la forma correcta de utilizar este método? ¿Está bien usar db.yieldIfContendedSafely()
más de una vez en la misma transacción, entre múltiples escrituras en diferentes tablas en la base de datos? ¿Alguna sugerencia?