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?
- Portable JDBC vs SQLite en Android
- UnsatisfiedLinkError (Método nativo no encontrado)
- ¿Debo usar siempre transacciones en android sqlite?
- Dificultad para actualizar la tabla SQlite
- Almacenamiento de datos en Android: almacenamiento de archivos vs base de datos SQLite vs preferencias compartidas
- 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.
- Obtención de la excepción de base de datos de Sqlite en Android
- Inserción masiva en un dispositivo Android
- SQLite en el operador en query ()
- Android SQLite select * de la tabla donde nombre como% key% usando instrucciones preparadas
- Problema de almacenamiento de datos de Android
- Diferencia entre rawquery y execSQL en android sqlite base de datos
- ¿Cuál es la mejor estrategia de clave primaria para una aplicación móvil en línea / offline multi-cliente con base de datos SQLite y Azure SQL como almacén central?
- ¿Es Sqlite Database thread de instancia seguro
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í 🙂
- Iptables en android
- Retrofit – Los parámetros de @Body no se pueden usar con codificación de formularios o multipartes