Подтвердить что ты не робот

Обработка баз данных двумя процессами

У меня есть приложение с двумя частями.

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

может быть isDatabaseInUseMethod?

Ответ 3

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