Bueno, sigo con el mismo problema, lo había apañado pero después de un tiempo, cuando hay muchos registros tarda demasiado y el usuario se queja, asi que mi parche no sirve, he hecho algunas modificaciones, una es que abro una vez la bd y no la cierro nunca, he puesto el close en el onDestroy de la activity principal, pero no se dispara practicamente nunca.
Lo que hago es que leo ciertos registros de una tabla, los pongo en un cursor y luego recorro este cursor mediante un bucle Do While, por cada registro lo que hago es una inserción o un update en otra tabla, según el registro leido, pues bien resulta que el bucle va demasiado rápido y no espera a que el insert en la bd finalize, el bucle recorre todos los registros pero solo da de alta un 10% de los registros que debería.
He probado de hacer la operacion en un transaccion, pero el resultado es el mismo, mi apaño consistia en que despues del insert hacía un bucle para que esperara y el resultado final era el correcto pero no se porque tarda mucho tiempo, del orden de 1 minuto para 50 registros.
Es cierto que tengo en una sola clase la conexion a la bd y todas las operaciones en inserts y updates, si es posible me gustaría conservarlo asi porque tendría que hacer muchos cambios.
He cambiado la conexión, ahora es asi:
public synchronized SQLiteDatabase abrirBD() {
if (nHelper == null) nHelper = new BDHelper(nContexto);
nDB = nHelper.getWritableDatabase();
return nDB;
}
Solo se llama 1 vez y se usa la misma conexión para toda la app
Gracias