Pergunta

Como você acessa um SQLiteDatabase banco de dados em um tópico separado (ou seja: um AsyncTask) de um Activity E certifique -se de que você sempre o deixe em um estado legal?

Se eu entendi corretamente, o tópico pode ser morto a qualquer momento e o banco de dados pode permanecer aberto, potencialmente dando um IllegalStateException (SqlitedAtabase criada e nunca fechada) no último momento.

Como você lida com isso?

Foi útil?

Solução

Se seu AsyncTask é gerenciado pelo seu Activity, então Activity pode cancelar AsyncTask no tempo adequado (quando fica vulnerável ser morto pelo sistema operacional, por exemplo Activity.onPause()) assim AsyncTask.onCancelled() será chamado onde você pode fechar o banco de dados.

Se seu AsyncTask (ou a Thread) não é gerenciado por seu Activity Então você está com problemas e deve considerar redesenhar sua arquitetura.

Outras dicas

Dois caminhos:

  1. Você pode registrar um Runtime.addShutdownHook(..) e fechar o banco de dados lá.

  2. Crie personalizado Application e implementar onLowMemory() onde você fecha o banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top