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

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

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

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

Какая сделка здесь? Что происходит с программой, когда нажата кнопка «home»? Продолжает ли он работать или что он делает?

26 голосов | спросил sharptooth 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 19:02:46 +0400 2011, 19:02:46

5 ответов


12

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

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

Кнопка Back - это способ закрыть приложения, чтобы они были фактически закрыты.

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

ответил GAThrawn 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 19:18:37 +0400 2011, 19:18:37
26

Документ разработки Android Задачи и стоп-файл фактически охватывает это довольно красиво. Соответствующий отрывок:

  

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

     

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

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

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

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

ответил eldarerathis 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 19:13:53 +0400 2011, 19:13:53
4

Нажатие клавиши Home позволяет пользователю запустите новую задачу, показывая пусковую установку. Все активные задачи (и, следовательно, действия, включая ваш пример «Управление воздухом»), вызывают их onPause().

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

ответил Flow 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 19:23:05 +0400 2011, 19:23:05
4

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

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

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

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

ответил Gdalya 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 21:27:47 +0400 2011, 21:27:47
3

Кнопка «Главная» нажата, когда в приложении:

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

Кнопка «Главная» нажата, когда на главном экране:

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

О чем ваш друг может быть обеспокоен:

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

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

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

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

ответил Dylan Yaga 10 Jpm1000000pmThu, 10 Jan 2013 15:29:43 +040013 2013, 15:29:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132