studio programacion para mentor herramientas desarrollo con colección avanzado aula aplicaciones android database sqlite android-contentprovider synchronize

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.



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.