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:

 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?

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

  • Syncadapter onPerformSync que se llama dos veces la primera vez
  • ¿Cómo puedo obtener mi tipo de cuenta personalizada para que aparezca en la aplicación de contactos de Android?
  • Proveedor de calendario de Android: ¿Existe un identificador único para eventos, utilizable en varios dispositivos?
  • No se ha encontrado actividad para manejar Intent {act = android.accounts.AccountAuthenticator} aunque tenga una
  • Cómo actualizar sólo los contactos en lugar de agregar en el adaptador de sincronización
  • Cuando SyncAdapter ejecuta la sincronización en android?
  • ¿Es mala práctica o grosero hacer ContentResolver.setMasterSyncAutomatically en una aplicación android?
  • Intervalo de ContentResolver.addPeriodicSync redondeado
  • Cómo ocultar mi Administrador de Acount personalizado desde la interfaz de usuario de configuración
  • Mejores prácticas de token de Android OAuth2 Bearer
  • ¿Por qué ContentResolver.requestSync no activa una sincronización?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.