База данных Flushing и SQLite по андроиду

У меня есть приложение андроида с помощью базы данных SQLite. Я открываю базу данных, когда приложение запускается, но никогда не закрывайте его, как это находится в постоянном употреблении.

Что лучший способ состоит в том, чтобы сказать базе данных сбрасывать все свои изменения в постоянном хранении? Я должен просто закрыть его и вновь открыться или есть ли более эффективный путь?

Моя проблема состоит в том, что при тестировании по телефону, выключении телефона после многих записей иногда заставляет базу данных освобождать новые обновления, когда приложение перезапущено, который очевидно недопустим для системы баз данных.

Так как я не могу узнать, как получить приложение близкое событие, я не могу знать, когда вручную закрыть базу данных.

10
задан Akusete 13 July 2010 в 00:25
поделиться

2 ответа

Я открываю базу данных при запуске приложения, но никогда не закрываю ее, поскольку она постоянно используется.

Не делайте этого. Вы, очевидно, игнорируете все ошибки, появляющиеся в LogCat и жалующиеся на утечку соединений с базой данных.

Каков наилучший способ сказать базе данных базе данных промыть все свои изменения в

Она будет делать это автоматически в конце транзакции. По умолчанию каждая отдельная операция SQL (например, вставка) является транзакцией.

Нужно ли мне просто закрыть ее и открыть снова? или есть более эффективный способ?

Вы должны закрыть свою базу данных в какой-то момент (например, onDestroy() службы, которая является посредником вашей базы данных).

Моя проблема заключается в том, что при тестировании на телефоне, выключение телефона после нескольких записей иногда приводит к тому, что база данных теряет самые последние обновления, когда приложение перезапускается, что, очевидно. неприемлемо для системы баз данных.

Если вы можете создать пример проекта, который демонстрирует проблему даже после правильного закрытия соединения с базой данных, опубликуйте его на Android issue tracker.

Поскольку я не могу найти, как перехватить событие закрытия приложения, я не могу не знаю, когда вручную закрывать базу данных.

Закройте ее, когда все действия отвяжутся от службы, которая является посредником соединения с базой данных, запустив метод onDestroy() этой службы.

Или откройте новое соединение в каждом компоненте, которому нужен доступ к базе данных, и используйте синхронизацию Java, чтобы два потока не пытались одновременно использовать базу данных (если это необходимо).

9
ответ дан 4 December 2019 в 01:29
поделиться

Это на Дроиде? И как именно вы выключаете телефон? Если вы не вытащите батарею, выключение телефона приведет к медленному сворачиванию операционной системы, и в этот момент она зафиксирует все в памяти.

Когда именно вы потеряете свою базу данных? После каждого перезапуска приложений или просто случайно? Если после каждого перезапуска, то больше похоже на то, что вы уничтожаете базу данных при запуске.

-1
ответ дан 4 December 2019 в 01:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: