Manejo de bases de datos con 2 procesos

Tengo una aplicación que tiene 2 partes.

  • Un servicio que crea contenido.
  • Una aplicación que utiliza el contenido

Cada uno de estos funcionan como diferentes procesos. El problema es que ambos comparten una base de datos. Y frecuentemente consigo error bloqueado de base de datos, tanto cuando el servicio intenta escribir algo y 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 ya que tanto la interfaz de usuario y el servicio son 2 procesos diferentes, hay 2 singletons presumo. Así que eso no ayuda.
  • Incluso synchronise no ayudará a supongo, ya que de nuevo debido a dos procesos diferentes.
  • Content Providers tal vez una opción, pero ya que uso consultas complejas para cavar información, sería muy difícil de usar que también.

¿Cómo consigo que los dos procesos compartan la base de datos? Cualquier señal sería muy apreciada.

El uso de un proveedor de contenido es una opción. Otra es echar un vistazo a Berkeley DB . El BDB SQL API es compatible con SQLite y el gestor de bloqueo BDB permite múltiples subprocesos y / o procesos para leer / escribir en la base de datos simultáneamente.

Cerrar la conexión después de cada operación

Captura la base de datos error bloqueado e intente volver a conectar después de 50ms

O dejar que el servicio maneje la base de datos y la actividad solicite al servicio datos

Puede ser hay isDatabaseInUseMethod?

Debe utilizar un proveedor de contenido para canalizar las consultas de base de datos a través de una fuente. En el interior del proveedor de contenido, puede utilizar cualquier mecanismo de bloqueo que desee para garantizar que no tenga acceso concurrente. 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 hay que tener en cuenta: http://kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html

Creo que encontrarás algunas respuestas allí 🙂

  • Cómo utilizar la base de datos SQLite precargada en Android de Activos
  • Conversión de String en DateTime: Android
  • Nuevo carácter de línea \ n no se muestra correctamente en textView Android
  • Obtener todas las filas de SQLite
  • ¿Cómo usar SQLiteOpenHelper con la base de datos en sd-card?
  • Cómo almacenar un valor de tiempo en la base de datos SQLite en Android?
  • Arrastrar y soltar RecyclerView que se rellena desde SQLiteDatabase
  • ¿Cómo puedo insertar una comilla doble (") en el campo Varchar de la base de datos SQLite?
  • Android Rating Bar muestra sólo estrellas completas, no media estrellas también
  • Android busca base de datos SQLite en el teléfono
  • Copia dos bases de datos SQLite en la carpeta de activos de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.