Доступ к базе данных из разных потоков в Android - PullRequest
3 голосов
/ 05 октября 2011

У меня есть служба, которая загружает данные из Интернета в AsyncTasks. Он анализирует данные и сохраняет их в БД. Сервис работает непрерывно.

Есть изменение, которое Activity пытается прочитать из БД, пока служба записывает в него.

У меня есть помощник по базе данных с несколькими методами для записи и чтения. Может ли это вызвать проблемы? Потенциально пытаетесь открыть БД из двух разных потоков?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Пока вы используете только один экземпляр SQLiteDatabase, все будет в порядке. Просто убедитесь, что ваши операции чтения / записи в БД выполняются только во вспомогательной базе данных, а другие классы - нет. Любые транзакции, выполненные с одним и тем же объектом базы данных, будут автоматически синхронизированы для вас.

2 голосов
/ 05 октября 2011

было сказано и написано много книг о проблемах параллелизма в БД.

Но, используя stackoverflow как википедию, я нашел кое-что интересное вещь :

Sqlite на Android позволяет получить доступ к базе данных из нескольких процедур для читает, но если вы в настоящее время пишете из одного процесса, читает и при записи из других процедур произойдет исключение, потому что первый запись имеет блокировку на БД.

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

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