Вопрос

Как вы можете получить доступ к SQLiteDatabase база данных в отдельном потоке (т.е. AsyncTask) из Activity И убедитесь, что вы всегда оставляете его в юридическом состоянии?

Если я правильно понимаю, поток может быть убит в любой момент, и база данных может оставаться открытой, потенциально давая IllegalStateException (Sqlitedatabase создан и никогда не закрывается) в последнее время.

Как вы справляетесь с этим?

Это было полезно?

Решение

Если ваш AsyncTask управляется вашим Activity, тогда Activity может отменить AsyncTask в правильном времени (когда он становится уязвимым, чтобы быть убитым по ОС, например после Activity.onPause()) так AsyncTask.onCancelled() будет называться, где вы можете закрыть БД.

Если ваш AsyncTask (или а Thread) не управляется вашим Activity Тогда вы попадаете в беду и должны рассмотреть вопрос о перепроектировании вашей архитектуры.

Другие советы

Два пути:

  1. Вы можете зарегистрировать Runtime.addShutdownHook(..) И закрыть базу данных там.

  2. Создать таможние Application и внедрить onLowMemory() где вы закрываете базу данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top