Android: мне действительно нужно беспокоиться о закрытии экземпляров базы данных SQLite? - PullRequest
3 голосов
/ 21 апреля 2011

Мое приложение Android часто регистрирует ошибки, жалуясь на то, что я не смог опубликовать свои операторы, курсоры и базы данных.Фактически, я явно освобождаю все свои курсоры в блоках finally {} в конце кода, который их использует, и я закрываю свои базы данных в методах finalize () классов, которые их содержат.

Структура моего приложения очень затрудняет мне явный вызов метода close () для объекта базы данных (кроме финализатора), потому что, например, класс, который использует базу данных, не является классом Activity, но можетбыть классом, который косвенно используется Деятельностью.Так что этот класс сам не знает, когда Деятельность, к которой он в конечном итоге присоединен, разрушается.

Нужно ли мне беспокоиться об этом?Я постоянно пропускаю какой-то ресурс, не закрывая явно экземпляры моей базы данных?Есть ли опасность, что что-то не получится записать в файл?Реализует ли реализация SQLite на Android кэширование записи?Могу ли я отключить его или вызвать синхронизацию?

Какова политика виртуальной машины Android в отношении финализаторов - гарантированно ли они будут работать в конечном итоге?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

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

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

Простое закрытие моего соединения решило это. Итак, долгая история, не может быть больно быть аккуратным. Догадаешься, ты все равно это знал и просто ищешь подтверждения?

0 голосов
/ 22 апреля 2011

Использование SQLiteOpenHelper вместо SQLiteDatabase может уменьшить некоторые исключения.

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