Объект Application
одноэлементный. Он создается (и вызывается onCreate()
), когда создается процесс ОС, в котором размещается ваше приложение. Если ваше приложение размещает передний план Service
, то этот процесс ОС будет продолжать существовать, поэтому Application.onCreate()
не будет вызываться.
Мне не совсем понятно, зачем вам его вызывать , но вы можете запустить Service
в процессе ОС, отличном от других компонентов (Activity
, BroadcastReceiver
, Provider
) вашего приложения. В этом случае процесс ОС, на котором размещен передний план Service
, не будет воссоздан, но процесс ОС, в котором размещены ваши действия, будет воссоздан (если он будет остановлен с помощью Android, что обычно происходит, если не работают активные компоненты. в этом). Поскольку объект Application
существует в каждом процессе ОС, при воссоздании процесса ОС, в котором выполняются действия, Android создаст экземпляр нового объекта Application
и вызовет для него onCreate()
.
Чтобы ваш Service
работал в другом процессе ОС, просто добавьте это в тег <service>
в манифесте:
android:process=":remote"
ПРИМЕЧАНИЕ. Вы можете использовать любое имя вместо «удаленного», просто убедитесь, что он начинается с двоеточия (":")
ПРЕДУПРЕЖДЕНИЕ: вы должны знать, что у вас есть 2 процесса ОС для вашего приложения, и планировать соответственно. Код, выполняемый в этих двух процессах, не может видеть друг друга, поэтому это может вызвать дополнительные проблемы в вашем приложении. Любые данные, которыми вы обменивались между компонентами (например, Service
и Activity
), должны быть помещены в базу данных или общие настройки или какой-либо другой механизм для совместного использования их между процессами ОС.