Обработка базы данных с 2 процессами - PullRequest
22 голосов
/ 09 марта 2011

У меня есть приложение, которое состоит из 2 частей.

  • Служба, которая создает контент.
  • Приложение, которое использует контент

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

  • Класс, используемый для доступа к БД, является одноэлементным классом.Но так как пользовательский интерфейс и сервис - это 2 разных процесса, я предполагаю, что есть 2 синглета.Так что это не помогает.
  • Даже synchronise не поможет, я полагаю, еще раз из-за 2 разных процессов.
  • Content Providers возможно, вариант, но поскольку я использую сложные запросы для получения информации, было бы очень сложно использовать это тоже.

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

Ответы [ 4 ]

8 голосов
/ 10 марта 2011

Использование поставщика контента является одним из вариантов.Другой - взглянуть на Berkeley DB .BDB SQL API совместим с SQLite, а менеджер блокировок BDB позволяет нескольким потокам и / или процессам одновременно выполнять чтение / запись в базу данных.

3 голосов
/ 10 марта 2011

закрывать соединение после каждой операции

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

или позволить службе обрабатывать базу данных, и действие запрашивает данные у службы

может быть есть isDatabaseInUseMethod?

1 голос
/ 10 марта 2011

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

0 голосов
/ 09 марта 2011

Ниже приводится отличная статья о том, как блокировка работает с SQLite на Android и о чем следует знать: http://kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html

Я думаю, вы найдете там несколько ответов:)

...