Android-приложение onCreate, когда оно вызывается

Я до сих пор не понимаю, каков жизненный цикл Application (не Activity),

Совершенно очевидно, что метод приложения onCreate вызывается при запуске графического интерфейса.

Но начинается ли оно в ЛЮБОМ или ВСЕХ следующих случаях?

  • Виджет приложения виден
  • Широковещательный приемник получает что-то
  • Push-уведомление приходит на устройство и показывает сообщение
  • Push-уведомление нажимается после закрытия приложения (например, из Центра уведомлений)
  • Служба запущена

И как долго будет поддерживаться процесс подачи заявки?

Сейчас у меня проблема: я вижу, что приложение (процесс) перезапускается после того, как я закрываю/убиваю приложение. Однако ничего не реализовано, чтобы иметь такое поведение.


person htafoya    schedule 16.10.2015    source источник
comment
да для всех. В основном в любое время код из вашего приложения выполняется. Он сохраняется до тех пор, пока система не решит его остановить или пока вы не уничтожите его из меню недавних приложений.   -  person njzk2    schedule 16.10.2015


Ответы (2)


Но начинается ли оно в ЛЮБОМ или ВСЕХ следующих случаях?

Ваш экземпляр Application создается как часть запуска вашего процесса.

Виджет приложения виден

Просто быть видимым не имеет ничего общего с вашим приложением и его процессом. Ваше приложение и его процесс будут участвовать в заполнении виджета приложения при его создании и обновлении. Если, например, updatePeriodMillis запускает обновления, а когда приходит время, у вас нет процесса, то экземпляр Application создается как часть запуска процесса, прежде чем AppWidgetProvider вызывается с onUpdate().

Широковещательный приемник получает что-то

Если ваш процесс уже существовал, ваш экземпляр Application уже существовал. Если ваш процесс не существовал, то экземпляр Application создается как часть запуска процесса до вызова BroadcastReceiver с onReceive().

Push-уведомление приходит на устройство и показывает сообщение

Если вы имеете в виду GCM, так как это происходит в виде трансляции, см. выше.

Нажатие push-уведомления после закрытия приложения

Я понятия не имею, что вы имеете в виду под этим.

Служба запущена

Если ваш код запускает службу, значит, ваш процесс уже запущен и у вас уже есть файл Application. Если какой-то другой процесс запускает вашу службу, а ваш процесс не запущен, то Application создается перед Service как часть создания вашего процесса.

И как долго будет поддерживаться процесс подачи заявки?

Если под «процессом приложения» вы подразумеваете «процесс», ваш процесс будет примерно между миллисекундой и тысячелетием, грубо говоря. Он будет существовать до тех пор, пока Android не остановит его, чтобы освободить системную оперативную память для других приложений, или пока что-то специально не избавится от него (например, «убийца задач», принудительная остановка в настройках).

person CommonsWare    schedule 16.10.2015
comment
Итак, другими словами, он всегда запускается всякий раз, когда что-то в моем коде выполняется? - person htafoya; 16.10.2015
comment
@htafoya: Ваш процесс запускается, когда какая-то форма IPC требует, чтобы у вас был процесс. Запуск активности, запуск или привязка к сервису, отправка трансляции или работа с провайдером — четыре основных случая. Другие вещи являются уточнениями одного из них (например, AppWidgetProvider на самом деле является подклассом BroadcastReceiver). - person CommonsWare; 16.10.2015
comment
your process will be around for somewhere between a millisecond and a millennium, Это очень забавный/позитивный способ мышления, мне нравится, как вы взяли немного больший диапазон, чем необходимо... - person Bonatti; 21.01.2016

Приложение onCreate() вызывается, когда приложение было мертво, и оно было запущено.

Например:

  • Вы запускаете свое приложение, когда оно не запущено (первый запуск в сеансе или вы запускаете его после принудительной остановки)

  • Вы надолго закрываете любую активность (она не уничтожается сразу!), и Android решает закрыть ваше приложение, и вы перезапускаете его.

  • Вы переводите приложение в фоновый режим, загружаете Chrome, загружаете что-то, затем Android решает, что ваше приложение должно погибнуть, и убивает его (process com.example.acme.helloworld has died.), и само приложение уничтожается вместе со всеми статическими переменными, и ваше приложение воссоздается с нуля, но ваши действия загрузить из Activity Stack и onSaveInstanceState -bundle

Учитывая, что служба приемника push-уведомлений, скорее всего, находится в другом процессе, я бы предположил, что он также может запустить экземпляр вашего приложения с нуля.

person EpicPandaForce    schedule 16.10.2015