Eliminar la base de datos cuando se quita una cuenta
Mi aplicación utiliza el patrón SyncAdapter
, que mantiene las credenciales de usuario utilizando el AccountManager
y un ContentProvider
para almacenar datos en un db.
Cuando la account
se quita puedo quitar el DB usando el acercamiento explicado en esta pregunta . El db se quita haciendo:
- Otto / EventBus a través de múltiples procesos
- ContentProvider no aparecerá en el área de datos y sincronización
- ¿Por qué AccountManager.addAccount puede devolver false de forma explícita?
- Administrador de cuentas: la aplicación de Android no aparece en la pestaña Cuentas de Configuración,
- Uso de ContentResolver en lugar de ContentProviderClient en SyncAdapter
boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME);
Esto funciona bien, pero cuando hago el inicio de sesión de nuevo todo todavía está allí. Se siente como el ContentProvider
no sabe que el db se ha quitado.
En esta respuesta , inazaruk dice:
Debe asegurarse de que ha eliminado el proceso que hospeda ContentProvider que utiliza ese archivo de base de datos específico. Y sólo que eliminarlo.
Matar el proceso para borrar un db no se siente bien.
¿Hay algo mejor que hacer?
- Activar la opción de sincronización de forma predeterminada cuando es falso en la aplicación
- Up-Sync y Down-Sync en Android?
- SyncAdapter periodicsync () no se activa
- Se pierde la aplicación Android de SyncAdapter
- ¿Cómo señalar la sincronización completa al Android SyncManager?
- ¿Cómo puedo añadir una categoría a mi SyncAdapter?
- ContentResolver.requestSync en Sync Adapter no funciona en Android
- SyncAdapter utiliza sólo los últimos extras para varias llamadas requestSync ()
Si hubiera tenido que hacer eso, lo probaría de la siguiente manera:
Agregue un poco de Uri
que cuando usted inserta o suprime usando ese Uri
dispara supresión de la base de datos dentro de su ContentProvider
. Al borrar también borrar todas las referencias a SQLiteDatabase
ya que es posible que todavía pueda acceder al archivo de base de datos antiguo a través de ese (Si elimina un archivo en Linux y tiene ese archivo abierto todavía se puede usar – ya no es accesible a través de el camino).
Al poner la supresión dentro de ContentProvider
, debería ser capaz de cerrar la conexión de base de datos y realizar un seguimiento del estado de supresión de una manera que sabe que necesita volver a crear el archivo de base de datos.
ContentProviders
no salen a menos que usted mate su aplicación por lo que probablemente tenga la misma instancia en ejecución y, probablemente, las referencias al archivo anterior como se mencionó anteriormente