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