El Android utiliza el mecanismo de bloqueo de Java para mantener el acceso de base de datos SQLite serializado. Por lo tanto, si el hilo múltiple tiene una instancia de db, siempre llama a la base de datos en forma serializada y, por supuesto, la base de datos es segura para subprocesos.
Si confirmamos que estamos utilizando la base de datos de un solo hilo, tuvimos la opción de desactivar la función de bloqueo interno de la base de datos llamando al setLockingEnable(false)
pero este método obtuvo deprecated del nivel API 16 y ya no está en uso. si ve la implementación de este método en la clase SQLiteDatabase
, no encontrará nada escrito, es decir, el método vacío.
public void setLockingEnabled (boolean lockingEnabled)
Este método ahora no hace nada. No utilice.
Una cosa que debemos tener cuidado de que es que debemos hacer una instancia de la clase de ayuda (es decir, por lo que es Singleton) y compartir misma instancia de hilo múltiple y no llamar close()
en la base de datos en entre la operación, de lo contrario usted puede conseguir siguiente excepción:
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase
por lo tanto, no llame database.close()
de entre el acceso a la base de datos, base de datos auto cerca realizar la operación internamente cuando toda la operación sería el final.
posible duplicado de [¿Cuáles son las mejores prácticas para SQLite en Android?] (Http://stackoverflow.com/questions/2493331/what-are-the-best-practices-for-sqlite-on-android) –
debe usar el bloqueo como se describe en https://stackoverflow.com/questions/12758655/sqlitedatabase-multi-thread-locking-pattern –