Что происходит с запущенной программой, когда в телефоне Android нажимается кнопка «домой»?

27

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

Тем не менее, похоже, что это не происходит в соответствии с игрой Air Control. Иногда, когда я играю в Air Control и нажимаю «домой», а затем снова запускаю Air Control - он приостанавливается (как будто я нажал кнопку «пауза»), и я могу возобновить игру. Иногда то же самое приводит к тому, что Air Control прекращает игру и начинает заново.

Похоже, я чего-то не понимаю.

В чем здесь дело? Что происходит с программой при нажатии «home»? Он продолжает работать или что он делает?

Sharptooth
источник
Я сомневаюсь, что нажатие кнопки «домой» приводит к более высокому потреблению энергии
Поток

Ответы:

12

Нажатие Homeпереключает вас из приложения на домашний экран, оставляя ваше приложение запущенным в фоновом режиме. Это немного похоже на переключение между окнами на ПК с Windows.

За исключением того, что, когда у вашего телефона заканчиваются ресурсы, такие как память, он начнет закрывать приложения, работающие в фоновом режиме, так что у вашего телефона будет достаточно ресурсов для того, что вы пытаетесь сделать сейчас. Игры часто являются одними из первых приложений, которые телефон «убивает» для экономии ресурсов, так как они часто используют гораздо больше памяти и процессора, чем другие приложения. Вот почему иногда ваша игра все еще работает на паузе, а иногда Android закрывает ее для вас.

BackКнопка способ закрывать приложения , так что они на самом деле закрыты.

Смотрите также Как правильно закрывать приложения в Android?

GAThrawn
источник
26

Документ «Разработка Android» - « Задачи» и «Back Stack» («Задачи» и «Back Stack») на самом деле довольно хорошо это освещает. Соответствующая выдержка:

Задача - это единое целое, которое может перейти в «фон», когда пользователи начинают новую задачу или переходят на главный экран с помощью клавиши HOME. Находясь в фоновом режиме, все действия в задаче останавливаются, но задний стек для задачи остается неизменным - задача просто потеряла фокус, пока выполняется другая задача, как показано на рисунке 2. Затем задача может вернуться к " передний план ", чтобы пользователи могли выбрать, где они остановились. Предположим, например, что текущая задача (Задача A) имеет три действия в своем стеке - два под текущим действием. Пользователь нажимает клавишу HOME, затем запускает новое приложение из панели запуска приложений. Когда появляется главный экран, задание A переходит в фоновый режим. Когда новое приложение запускается, система запускает задачу для этого приложения (Задача B) со своим собственным стеком действий. После взаимодействия с этим приложением пользователь снова возвращается в «Домой» и выбирает приложение, которое первоначально запустило задачу А. Теперь задача А выходит на первый план - все три действия в ее стеке не повреждены, а действие в верхней части стека возобновляется. На этом этапе пользователь также может переключиться обратно к Задаче B, перейдя в «Домой» и выбрав значок приложения, запустившего эту задачу (или коснувшись и удерживая клавишу HOME, чтобы отобразить недавние задачи и выбрав одну). Это пример многозадачности на Android. пользователь также может переключиться обратно на задачу B, перейдя домой и выбрав значок приложения, запустившего эту задачу (или коснувшись и удерживая клавишу HOME, чтобы отобразить недавние задачи и выбрав одну). Это пример многозадачности на Android. пользователь также может переключиться обратно на задачу B, перейдя домой и выбрав значок приложения, запустившего эту задачу (или коснувшись и удерживая клавишу HOME, чтобы отобразить недавние задачи и выбрав одну). Это пример многозадачности на Android.

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

Описание : Задача перемещается в фоновый режим, когда вы нажимаете Homeи сохраняете память, фактически ничего не делая и сохраняя свое состояние. Это означает, что (вообще говоря) вы можете переключиться обратно к задаче, и она подберется с того места, где остановилась. Однако система Android может - и будет - убивать фоновые задачи, если ей нужно восстановить память. Когда и если это происходит, полностью зависит от системы, и, вероятно, именно поэтому вы видите непоследовательное поведение при возобновлении работы.

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

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

eldarerathis
источник
Таким образом, они уничтожаются для каждой задачи, а не для каждой деятельности / процесса. Последнее позволило бы частично убить задачу, что, вероятно, нежелательно.
Джиггунджер
4

Нажатие клавиши «Домой» позволяет пользователю запустить новую задачу, показывая панель запуска. Все активные Задачи (и, следовательно, Действия, включая ваш пример "Air Control") будут вызывать свой onPause()метод.

Приложение (и его активность) должны восстановить точное предыдущее состояние, когда оно снова станет видимым. Также возможно, что процесс приложений будет убит, пока действие будет фоновым, но это не должно влиять на работу пользователей. Пользователь не должен быть в состоянии определить разницу, если действие было просто приостановлено или оно также было убито. Это может объяснить различное поведение Air Control, что может быть признаком ошибочной реализации управления жизненным циклом Android.

поток
источник
Я думаю, что под "убитым" вы подразумеваете остановленный, а не уничтоженный. Я верю в нормальную терминологию Linux, когда вы убиваете процесс (например, Activity) вами destroy()соответствующих компонентов приложения.
Jiggunjer
Нет, я имею в виду уничтожено.
Поток
Когда вы нажимаете клавишу возврата домой, onStopметод вызывается. Убитый процесс не означает, что у активности вызывается его onDestroyedметод, хотя он действительно похож. «Уничтожение» процесса Activity означает, что виртуальная машина удалена из RAM. Для меня это (Android убивает его), вероятно, повлияет на пользовательский опыт.
Jiggunjer
4

Моя репутация на этом сайте все еще слишком низкая, чтобы голосовать, поэтому я отвечаю, чтобы подчеркнуть ответ Флоу. Я продолжаю сталкиваться с этой проблемой в одном из моих приложений. У меня есть различные элементы управления счетчиком, и вы должны явно сохранить их состояние в onPause (), а затем восстановить состояния в onResume () - Android не запоминает их состояния автоматически.

Другая сложность заключается в том, что Android иногда вызывает функцию onCreate () приложения, когда вы ожидаете, что она вызовет onResume ().

Таким образом, ваша проблема с Air Control (или любым другим приложением) относится именно к этому приложению, и вы должны сообщить о поведении разработчику для исправления. У большинства приложений есть контактный адрес электронной почты в Маркете.

Кстати, если вы хотите понять жизненный цикл приложения, я рекомендую главу 2 «Привет, Android» Эда Бернетта, особенно рисунок 2.3.

Gdalya
источник
3

Кнопка Домой Нажимается, когда в приложении:

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

Кнопка Домой Нажимается, когда на главном экране:

Это настраивается многими сторонними программами запуска; однако многие из них по умолчанию возвращают вас на ваш «главный» домашний экран (по умолчанию запускается это).

Что может беспокоить вашего друга:

Переключение приложений может занимать много памяти и приводить к записи нескольких дисков для сохранения данных. Это использует батарею; однако, как правило, это не является основной причиной разряда батареи на устройствах (операционные системы оптимизированы для этих целей).

Некоторые приложения продолжат работу в качестве фонового приложения, поэтому нажатие кнопки «Домой» не убьет их (например, Google Play Music все равно будет воспроизводиться после нажатия кнопки «Домой»).

Ваш друг может быть обеспокоен тем, что, нажав кнопку «Домой», вы не вышли из программы, и поэтому она все еще работает. Android будет выгружать эти приложения по мере необходимости.

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

Дилан Яга
источник