Сводка : последовательная синхронизация нескольких баз данных SQLite со стороной сервера.
Я работаю над приложением Android, которое должно быть модульным: у нас есть средство запуска, которое запускает намеренияПо выбору пользователя запускать разные модули приложения (отдельные устанавливаемые пакеты).Как и сейчас, каждый модуль имеет свою собственную базу данных SQLite, и это прекрасно работает.Задача, на которую я наделен, требует синхронизации данных между контроллером и сервером (SQL Server 2008 R2) с использованием MS Sync Framework 4.0 (в настоящее время CTP октября).Я разработал Android lib в соответствии со спецификациями Sync Framework, и это тоже работает.
Проблема, с которой я столкнулся, заключается в том, что из-за этой слабосвязанной конструкции (и некоторых других ограничений) мне нужна кнопка запуска, которая заставляет все модули синхронизировать свои базы данных по одной (заказ не выполняется)на данный момент это не имеет значения).
Мой текущий подход состоит в том, чтобы иметь абстрактные классы BroadcastReceiver & Service (я только сейчас обнаружил IntentService), которые наследуются в каждом модуле.Таким образом, в модуле запуска я передаю намерение, каждый модуль выбирает его, используя настроенный BroadcastReceiver, и синхронизирует свою базу данных, используя, опять же, настроенный сервис ... Параллельно.Я проверил заказанные трансляции, но поскольку у меня есть служба, выполняющая реальную работу, она не очень помогает.Единственный другой способ, которым я могу сейчас придумать, - это иметь общесистемный мьютекс и использовать его для блокировки синхронизирующего вызова в каждой службе.
Это моя первая задача, связанная с Android, так что, вероятно, есть лучший способ решитьэто, я бы не стал пересматривать часть синхронизации, если это немного облегчит будущую жизнь наших команд.
[ EDIT ] Так что, похоже, Java не поддерживает именованные мьютексы.
[ EDIT2 ] Под модулями (или отдельными устанавливаемыми пакетами) я подразумевал разные APK для каждого модуля.Поэтому при запуске модуля вы фактически запускаете новый процесс для него.