Base de datos SQLite de Android con Multi Threading
Estoy trabajando en una aplicación donde tengo que usar multi threading. Tengo una sola instancia de la clase de SQLiteOpenHelper a través de mi uso donde tengo métodos abrir y cerrar la base de datos y algunos métodos para insertar y traer datos.
Ahora mi problema es, abrir la base de datos en primer hilo y iniciar las transacciones al mismo tiempo Second Thread también obtener el objeto de base de datos abierta y comenzar las transacciones.
- Eliminar todos los datos de todas las tablas de Sugar ORM
- Android cola las solicitudes de HTTP mientras la red no está disponible y procesa cuando se enciende
- No se puede abrir la base de datos en modo de lectura / escritura
- Ormlite o sqlite ¿Cuál es bueno para la perspectiva de Android?
- SQLite Android Inner Join
El primer hilo completa su proceso y cierra la base de datos en el otro lado mi segundo hilo está trabajando y el segundo hilo consigue que la base de datos se cierra .
Su problema lógico algunos por favor alguien me ayude a resolver este problema cómo puedo manejar el cierre de la base de datos de una manera adecuada.
Gracias por adelantado
- Inserción o actualización de SQLite de Android
- Android.database.CursorIndexOutOfBoundsException: Índice 0 solicitado, con un tamaño de cursor 0
- La base de datos Robolectric que accede arroja un error
- Android.database.sqlite.SQLiteCantOpenDatabaseException: error desconocido (código 14): No se pudo abrir la base de datos
- Android: actualización de la base de datos de usuarios con SQLiteAssetHelper
- Ormlite SQLiteCursor: cierre el cursor en null dos veces o más
- Obtener el valor de campo con un cursor
- SQLiteDiskIOException con el código de error 10: error de E / S de disco
Tengo una sola instancia de la clase de SQLiteOpenHelper a través de mi uso donde tengo métodos abrir y cerrar la base de datos y algunos métodos para insertar y traer datos.
Sólo debe cerrar la base de datos cuando haya terminado completamente con ella, como cuando la actividad o servicio que creó estos subprocesos se destruye.
Tampoco está fuera de la cuestión para usted simplemente nunca cerrar la base de datos. Si implementa un ContentProvider
, nunca cerrará su base de datos. Si bien esto puede provocar advertencias en LogCat acerca de la pérdida de los identificadores de bases de datos abiertas, la naturaleza transaccional de SQLite significa que si no se cierra una base de datos no se deben producir problemas particulares (por ejemplo, no se puede liberar un búfer).
Normalmente me limitaría a mantener el SQLLite Android DB abierto y cerrarlo al final de la aplicación, sin embargo, eso no elimina el problema inicial.
He encontrado cuando el DB no está cerrado correctamente, que podría tener un problema de ser abierto en Android, por lo que el simple nunca cerrar el DB no parecía funcionar para mí.
Envolver todas las operaciones en las transacciones y los bloques del manejador de excepciones.
Tenga en cuenta que todas las transacciones deben completarse en el momento en que cerrar el DB, por lo que el método de cierre espera transacciones para completar (tengo contador de transacciones, así para esto).
A continuación, se muestra un ejemplo de bloque de transacción try catch que envuelvo todas las operaciones de DB en:
SQLPersistentStore extiende el objeto SQLiteOpenHelper getPersistentStore () {devuelve null cuando se cierra el DB}.
Anular operación pública (..) {
SQLPersistentStore persistentStore = null; try { persistentStore = getPersistentStore(); persistentStore.beginTransaction(); ... do the DB operations persistentStore.setTransactionSuccessful(); } catch ( IllegalStateException e) { ... Log.w(... } catch (Exception e) { Log.e(TAG, ... throw new RuntimeException(e); } finally { if(persistentStore != null){ persistentStore.endTransaction(); } }
Cuando el DB está cerrado y usted intenta una operación en él, usted consigue IllegalStateException, y ése se coge.
- Ping de shell de adb el host no funciona
- Comparar la versión de aplicación en ejecución con la versión de mercado de la aplicación