Acessando um banco de dados em um tópico separado no Android
-
28-09-2019 - |
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?
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:
Você pode registrar um
Runtime.addShutdownHook(..)
e fechar o banco de dados lá.Crie personalizado
Application
e implementaronLowMemory()
onde você fecha o banco de dados.