Связывание службы с android.app.Activity vs привязка ее к android.app.Application

Есть ли какая-либо принципиальная разница в привязке службы к android.app.Activity vs, связывающей ее с android.app.Application. Я хочу привязать службу к Application, потому что я хочу сохранить некоторое глобальное состояние/данные в приложении вместо того, чтобы дублировать его во всех моих действиях..

Спасибо.

Ответы

Ответ 1

Нет. Нет принципиальной разницы.

Тем не менее, подклассы android.app.Application - очень хорошее место для хранения данных глобального/состояния. Существует только один экземпляр, и все, что происходит из контекста, имеет к нему доступ.

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

Ответ 2

ответ @Jere.Jones не на 100% правильный. У вас есть один экземпляр класса приложения для каждого процесса. Поэтому, если вы запускаете свою службу в отдельном Процессе, например. с

 <service
        android:name=".engine.NetworkService"
        android:exported="false"
        android:process=":xxxService" />

у вас есть два отдельных экземпляра Appliaction, что означает, что если вам нужно "удерживать состояние", вы должны убедиться, что это либо не пересечение процесса, либо вам нужно использовать IPC для синхронизации этих данных.