Доступ к базе данных в отдельном потоке в Android - PullRequest
2 голосов
/ 24 ноября 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

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

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

0 голосов
/ 24 ноября 2010

Два способа:

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

  2. Создайте пользовательский Application и внедрите onLowMemory(), где вы закроете базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...