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

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

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

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

    Вопрос

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

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

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

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

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

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

    Ответы

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

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

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

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

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

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

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

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

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

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

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


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