Android

Что именно происходит, когда вы проводите Android-приложение из списка последних приложений?

Что происходит с приложением и данными, когда вы удаляете приложение из списка текущих приложений Android? Читайте дальше, как мы расследуем.

Сегодняшняя сессия Вопросов и Ответов приходит к нам благодаря энтузиасту Android — подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.

Вопрос

Читатель Android-энтузиастов Eldarerathis интересуется функциональностью свипирования приложений, которая позволяет вам открыть список запущенных приложений с помощью кнопки «Домой», а затем провести их вправо, предположительно, чтобы закрыть их:

В недавнем списке приложений в Ice Cream Sandwich добавлена ​​возможность смахивать приложения из списка, тем самым навсегда их исключая (и, насколько я знаю, это функция ванили, а не функция CM / custom ROM). Документация и основные сведения о платформе, по-видимому, не охватывают скрытую работу этой функции, но мне любопытно узнать, что на самом деле делает система.

Вдобавок к своему любопытству, я решил провести быстрый тест: я запустил Music на установке CM9, а затем отказался от нее. Затем я проверил список последних приложений и увидел, что он действительно есть (и в правильном состоянии, в зависимости от миниатюры). Затем я вошел в « Settings->Applications и принудительно остановил приложение «Музыка», но оно все еще было указано в недавнем списке, что заставило меня поверить, что оно не связано с процессами, происходящими в фоновом режиме.

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

Итак, что же на самом деле происходит на уровне ОС, когда вы удаляете приложение из недавнего списка? Он просто удаляет данные приложения из ОЗУ и собирает их мусором, разрушая его сохраненное состояние?

Что именно происходит, когда вы удаляете приложение из списка?

Ответы

Разработчик Android-энтузиастов Остин Миллс (Austin Mills) предлагает несколько идей:

Удалять приложения из списка последних приложений — ванильно, и да, плохо документировано. Это было предметом пристального обсуждения на различных форумах Android … консенсус лучше всего описать здесь в некоторых комментариях : поведение похоже на закрытие приложения, но не совсем то же самое, что и закрытие приложения (для приложений, которые не определяйте явную обработку кнопки «назад») это то же самое, что отбрасывать достаточное количество раз из приложения, из которого вы выходите

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

Я полагаю, что для приложения «Музыка» запускается служба, поэтому, хотя само задание (приложение «Музыка» / пользовательский интерфейс) может быть закрыто, служба продолжает работать в фоновом режиме, поэтому ваша музыка не останавливается внезапно только потому, что задача был очищен по причинам управления памятью. Это могло повлиять на то, что вы видели.

Затем, участвуя в круговороте вопросов и ответов, Эльдарерат вернулся с некоторыми собственными исследованиями, чтобы завершить ответ:

Кажется, я нашел волшебные поисковые термины, которые привели к некоторым объяснениям от сотрудников Google. В частности, я нашел пару разных мест, где Дайан Хэкборн объясняет, что происходит, когда вы удаляете что-то из недавнего списка. Первый комментарий к одному из ее постов в Google+ :

[W], в частности, происходит, когда вы сильно ударите по недавней задаче, если это так: (1) убивает любые фоновые или пустые процессы приложения (см. Здесь, что это означает), и (2) использует новый API, чтобы сообщать любым службам о приложение об удаляемой задаче, чтобы оно могло делать все, что считает нужным.

Она также отмечает в комментарии в блоге :

Фактически, удаление записи в недавних задачах уничтожит все фоновые процессы, которые существуют для процесса. Это не приведет к немедленной остановке служб, однако для них существует API, позволяющий узнать, была ли удалена задача, чтобы решить, хотят ли они, чтобы это означало, что они должны остановиться. Это связано с тем, что удаление, скажем, недавней задачи приложения электронной почты не приведет к остановке проверки электронной почты.

Если вы действительно хотите полностью остановить приложение, вы можете долго нажимать на последние задачи, чтобы перейти к информации о приложении, и нажать «Force stop» на этом. Принудительная остановка — это полное уничтожение приложения: все процессы отключены, все службы остановлены, все уведомления удалены, все тревоги удалены и т. Д. При повторном запросе приложению не разрешается запускаться снова.

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


Есть что добавить к объяснению? Звук выключен в комментариях. Хотите узнать больше ответов от других опытных пользователей Stack Exchange? Ознакомьтесь с полной веткой обсуждения здесь .

Похожие посты
Android

Samsung перехватывает чехлы

Android

Samsung Captivate Чехлы

Android

Спринт HTC Hero

Android

LogMeIn зажигание