Я написал библиотеку, запускающую службу в фоновом режиме. Он отлично работает во всех приложениях.
Чтобы уменьшить использование ОЗУ, я хочу избежать использования нескольких сервисов для разных приложений. На самом деле, это достаточно, чтобы использовать только одну услугу, чтобы все было сделано.
Во-первых, я написал файл AIDL, чтобы сделать IPC между приложениями/библиотеками. Определена служба, экспортированная/разрешенная с разрешением подписи. Поскольку все приложения являются точно такой же службой, невозможно проверить, не вставлен ли какой-либо из них. При связывании службы для проверки состояния службы она всегда создает и уничтожает собственную услугу из-за природы флага BIND_AUTO_CREATE. Поэтому невозможно получить какую-либо информацию из экспортируемой службы, если она действительно запущена.
Затем я попытался определить Content Provider для манифеста библиотеки. Моя цель - обмениваться информацией об услугах через нее. Это действительно хороший механизм для связи между экспортированным сервисом и основным процессом приложения. Но он не может использоваться для нескольких экземпляров. Поскольку приложения, которые получают информацию поставщика контента из библиотеки, используют один и тот же авторитет, и поэтому невозможно установить второй. Он дает ошибку DUPLICATE_PROVIDER_AUTHORITY.
Какое ваше предложение по этому вопросу? Есть ли возможность создать механизм "ведущий/ведомый"? Можно ли сделать сервис singleton для приложения использующим проект библиотеки?
P.S: Проработаны методы вещания и общих предпочтений. Но они не эффективны для прослушивания обратного вызова из экспортируемой службы.