android - programacion - Manejo de bases de datos con 2 procesos.
manual android studio avanzado (4)
Tengo una aplicación que tiene 2 partes.
- Un servicio que crea contenido.
- Una aplicación que utiliza el contenido.
Cada uno de estos se ejecuta como procesos diferentes. El problema es que ambos comparten una base de datos. Y frecuentemente obtengo un error de bloqueo de la base de datos, tanto cuando el servicio intenta escribir algo como la interfaz de usuario está leyendo datos. También viceversa. ¿Cómo se hace esto?
- La clase utilizada para acceder a DB es una clase singleton. Pero como UI y el servicio son 2 procesos diferentes, hay 2 singletons, supongo. Así que eso no ayuda.
- Incluso la
synchronise
no ayudará, supongo, ya que de nuevo debido a 2 procesos diferentes. -
Content Providers
pueden ser una opción, pero como uso consultas complejas para obtener información, también sería muy difícil usarla.
¿Cómo consigo que los dos procesos compartan la base de datos? Cualquier señal sería muy apreciada.
Cierre la conexión después de cada operación.
atrapa el error de la base de datos bloqueada e intenta reconectarse después de 50 ms
o deje que el servicio maneje la base de datos y la actividad solicite datos al servicio
Puede haber isDatabaseInUseMethod?
Debe usar un proveedor de contenido para canalizar sus consultas de base de datos a través de una fuente. Dentro del proveedor de contenido, puede utilizar cualquier mecanismo de bloqueo que desee para asegurarse de que no tenga acceso simultáneo. También puede pensar en usar observadores de contenido para coordinar acciones de servicio con cambios en la base de datos.
El siguiente es un gran artículo sobre cómo funciona el bloqueo con SQLite en Android y qué cosas debe tener en cuenta: http://kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html
Creo que encontrarás algunas respuestas allí :)
Usar un proveedor de contenido es una opción. Otra es echar un vistazo a Berkeley DB . La API de BDB SQL es compatible con SQLite y el administrador de bloqueo de BDB permite que varios subprocesos y / o procesos lean / escriban en la base de datos simultáneamente.