2015-07-01 2 views
2

Я не могу найти хорошую документацию на долгосрочном жизненном цикле приложения.Жизненный цикл запуска приложения

Если у меня есть приложение, нажмите кнопку «Домой», а затем щелкните значок запуска приложения, имя приложения OnCreate не вызывается и вызывается функция onResume для первой операции. Но предположительно, если я подожду достаточно долго, щелкнув значок запуска, вызывается Application onCreate и запускается MAIN LAUNCHER. Когда это происходит?

Когда я просматриваю приложения в списке «Аванты», если я нахожусь на действительно старом приложении, которое я не использовал в течение месяца, приложение не вернется в прежнее состояние, вместо этого приложение запускает его запуск. Поэтому кажется, что в какой-то момент приложения переходят из сохраненного состояния в состояние без сохранения. Когда это происходит?

Если приложение убито из-за давления памяти, предположительно, пакет savedInstanceState сохраняется и вызывается Activity onResume, но вызывает ли вызов onCreate приложения в этой точке? Как долго сохраняется пакет?

+0

Возможный дубликат [Will 'Bundle savedInstanceState «будет жив после того, как приложение будет убито?] (Http://stackoverflow.com/questions/16837595/will-bundle-savedinstancestate-be-alive-after-application-is- будучи убитым) –

ответ

4

Но предположительно, если я подожду достаточно долго, в какой-то момент щелчок на значке запуска вызовет Application onCreate и начнется действие MAIN LAUNCHER. Когда это происходит?

Это отдельные вопросы.

Application singleton создан вскоре после того, как процесс разветвлен, как часть поворота нового процесса для вас. Это будет срабатывать, когда что-то нужно, чтобы ваше приложение существовало (например, пользовательские нажатия на значок запуска), и ваш процесс еще не существует. Processes do not live forever. Как долго какой-либо данный процесс остается в памяти, зависит от множества факторов окружающей среды.

Независимо от того, возобновляет ли деятельность пусковой установки существующее задание или сбрасывается ли ваша задача, зависит от того, существует ли задача (т. Е. Пользователь удалил задачу из списка недавних задач) и сколько времени прошло с тех пор, пользователь оставил задачу. Задача считается «живой» около 30 минут, хотя есть манифеста, которые вы можете использовать, чтобы попытаться немного ее настроить.

Так что в какой-то момент приложения переходят из сохраненного состояния в состояние без сохранения. Когда это происходит?

Около 30 минут (см. Предыдущий параграф).

Если приложение прибудет убили из-за нехватки памяти

Я полагаю, что «приложение прибудет убили» вы имеете в виде «процесс для приложения завершаются».

Предполагается, что пакет savedInstanceState сохраняется и вызывается Activity onResume, но вызывает ли вызов onCreate приложения в этой точке?

Да, потому что для вас должен быть создан новый процесс.

Как долго сохраняется связка?

Около 30 минут (см. Выше).

+0

Откуда берутся 30 минут - эксперимент или ссылка на ядро ​​или код рамки.? –

+0

@CommonsWare, когда вы запускаете неактивное приложение в списке недавних задач более чем за 30 минут, Android должен воссоздать самую большую задачу, не так ли? И вы говорите, что это произойдет без повторной доставки пакета? Что делать, если пользователь перейдет через стек, другие действия будут воссозданы таким же образом (без пакета)? – kiruwka

+0

@MorrisonChang: Я читал его где-то в документах, изучая главу задач для моей книги. Я всегда думал, что это правило было «если оно находится в списке недавних задач, то это недавняя задача». Это не так, особенно на Android 5.0+ с бесконечным обзорным экраном. К сожалению, на данный момент у меня нет ссылки, и она не подходит для быстрого просмотра вероятных мест. – CommonsWare

3

Каждое приложение, установленное на устройстве, работает в рамках его процесса.

  1. Если войти в приложение в первый раз, следующая последовательность называется:

    • Применение. onCreate()
    • YourFirstActivity. onCreate() (при условии, что YourFirstActivity объявлен в AndroidManifest.xml)
    • YourFirstAcitvity. onStart()
    • YourFirstActivity. onResume()
  2. При нажатии на кнопку Home, приложение переходит в фоновый режим и следующие методы обратного вызова называются:

    • YourCurrentActivity. onPause()
    • YourCurrentActivity. onSaveInstanceState() - этот вызов не указан точно, но вы можете предположить, что метод onStop() вызывается в большинстве случаев, который должен вызываться onSaveInstanceState().
    • YourCurrentActivity. onStop();

В то время как приложение в фоновом режиме не указано, как долго он будет там.

Это зависит от системы, чтобы поддерживать ее в фоновом режиме.

Многие приложения, когда вы находитесь в фоновом режиме, выполняете периодические синхронные сообщения, запускаете запланированные службы или просто запускаете на переднем плане при запуске, и для этой цели ОС Android должна каким-то образом найти память для выполнения всей этой логики. Таким образом, если в требуемой памяти есть нехватка, то ОС убивает процессы (например, ваше приложение).

Таким образом, если вы спрячете свое приложение на фоне и щелкните по значку запуска приложения или сразу же вернетесь к нему из списка недавних приложений, будет выполнена следующая последовательность методов обратного вызова (при условии, что вы скрыли приложение, находясь в YourCurrentActivity):

  • YourCurrentActivity. onRestart();
  • YourCurrentActivity. onStart();
  • YourCurrentActivity. onRestoreInstanceState();
  • YourCurrentActivity.onResume();

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

Если это происходит следующая последовательность методов обратного вызова, называются:

  • Применение. onCreate()
  • YourCurrentActivity. onCreate();
  • YourCurrentActivity. onStart();
  • YourCurrentActivity. onResume();

Обратите внимание, что это все еще ваша текущая активность, которую вы оставили при скрытии приложения на фоне.

Выполняется следующая последовательность, поскольку система создает новый процесс для вашего приложения в качестве точек @CommonsWare.

Как предотвратить повреждение приложения системой? (Android - implementing startForeground for a service?)

Надеюсь, что это поможет.

Смежные вопросы