В недавнем списке приложений в Ice Cream Sandwich добавлена возможность смахивать приложения из списка, тем самым навсегда их исключая (и, насколько я знаю, это функция vanilla, а не функция CM / custom ROM). Документация и основные сведения о платформе, по-видимому, не охватывают скрытую работу этой функции, но мне любопытно узнать, что на самом деле делает система.
Вдобавок к своему любопытству, я решил провести быстрый тест: я запустил Music на установке CM9, а затем отказался от нее. Затем я проверил список последних приложений и увидел, что он действительно есть (и в правильном состоянии, в зависимости от миниатюры). Затем я вошел Settings->Applications
и принудительно остановил приложение «Музыка», но оно все еще было включено в недавний список, что заставило меня поверить, что оно не связано с процессами, происходящими в фоновом режиме.
Понимая, что музыка, возможно, была неудачным выбором, я также протестировал приложение USA Today. Это демонстрировало в основном то же самое поведение, и казалось, что оно было вынуждено «перезапустить» после принудительной остановки (что имеет смысл), хотя миниатюра в списке последних приложений не отражала это (кешируется, я полагаю?).
Итак, что же на самом деле происходит на уровне ОС, когда вы удаляете приложение из недавнего списка? Он просто удаляет данные приложения из ОЗУ и собирает их мусором, разрушая его сохраненное состояние?
источник
Кажется, я нашел волшебные поисковые термины, которые привели к некоторым объяснениям от сотрудников Google. В частности, я нашел пару разных мест, где Дайан Хэкборн объясняет, что происходит, когда вы удаляете что-то из недавнего списка. Первый комментарий к одному из ее постов в Google+ :
Она также отмечает в комментарии в блоге :
Итак, похоже, что сводка заключается в том, что удаление приложения из списка сначала уничтожит все фоновые процессы для приложения, а затем используется
onTaskRemoved
для уведомления приложения о том, что фоновая задача была удалена. В этот момент кажется, что приложение должно решить, что произойдет, поэтому я думаю, что технически нет строгого правила о том, что происходит с приложением после этого момента.источник
В исходном коде есть некоторая информация в классах com.android.internal.policy.impl.RecentApplicationsBackground и com.android.internal.policy.impl.RecentApplicationsDialog .
Если я правильно их прочитал, есть определенные обработчики для выбора приложений, но нет ничего особенного для их смахивания, кроме тех
onDetachedFromWindow()
, которые вызывают,com.android.View.onDetachedFromWindow()
что в основном скрывает элемент и очищает его данные. Это намекает на то, что при перелистывании приложения ничего особенного не происходит, что соответствует ответу Остина Миллса, поскольку, поскольку в списке не отображается активное приложение,onPause()
и другие системные вызовы, которые выполняются при «выходе» из приложения, имеют уже случилось.источник
Я думаю, что он будет делать то же самое, что и кнопка "Назад". За исключением одного небольшого изменения. Это будет
finish()
все действия / фрагменты в приложении.Просто провел небольшое тестирование с небольшим приложением для самостоятельной сборки. Вы тоже можете проверить. Вот мое приложение для тестирования: https://bitbucket.org/Leandros99/lifecycletest (также доступна для скачивания. Для тех, кто не может собрать.)
В каждом методе жизненного цикла Activity ( http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle ) распечатать приложение в журнале. Вы можете просмотреть его с помощью adb logcat (установите Android SDK, перейдите к инструментам платформы в cmd / shell и наберите текст
adb logcat
. Теперь вы увидите, что каждый раз, когда вы делаете что-то вроде нажатия кнопки «назад» или «home», приложение печатает метод жизненного цикла, упомянутый выше. )Ваш вопрос: если я проведу пальцем по приложению из панели недавних приложений,
onDestroy
будет вызван метод. Это делает почти так же, как кнопка возврата.Надеюсь, я немного помог. Если есть вопросы, просто спросите.
источник
Он закрывает приложение и его данные, которые хранятся в оперативной памяти. Таким образом, давая вам больше места в оперативной памяти, чтобы вы могли запускать другие приложения. Однако фоновые сервисы НЕ закрываются автоматически из-за закрытия используемого приложения.
источник