База данных случайно удаляет себя очень часто - PullRequest
2 голосов
/ 28 июня 2010

У меня есть обычная база данных SQLite в моем приложении, управляемая через собственный ContentProvider и реализованная через SQLiteOpenHelper.

Только на Droid каждые несколько недель база данных просто исчезает. У меня есть несколько пользователей, которые написали мне об этом, и я тоже видел это сейчас. Я добавил некоторую отладочную информацию (сложно воспроизвести, когда вы видите ее только раз в несколько недель), и в одном случае это происходило между обновлениями виджетов - во-первых, виджет отображается и показывает данные просто отлично, в следующий раз SQLiteOpenHelper onCreate называется.

Само приложение выполняет некоторые многопоточные махинации, но все реализации ContentProvider имеют ключевое слово synchronized, весь доступ к базе данных осуществляется через провайдера контента, и в описанном выше примере многопоточность не выполняется ( само приложение не было запущено, только виджет).

И снова, это только на Droid. Я никогда не видел это на G1. Я никогда не закрываю базу данных, но, поскольку она является поставщиком контента, мне кажется, что я не должен этого делать в первую очередь (я помню, как вздор сказал, что идея заключается в том, что ОС закроет процесс приложения, когда это необходимо, что автоматически закрыть базу данных).

Есть идеи?

1 Ответ

1 голос
/ 19 октября 2010

Согласно документации, в SQLiteDatabase включена блокировка по умолчанию (SQLiteDatabase.setLockingEnabled). В моем приложении я явно включаю его после открытия и добавляю еще немного более параноидальной синхронизации, чтобы убедиться, что несколько потоков не могут получить доступ к базе данных одновременно, и это, похоже, исправило ее.

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

В любом случае, явное включение блокировки и правильной синхронизации помогло мне.

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