Кроме основных атрибутов и флагов, которые уже были рассмотрены, существует еще несколько других, которые так же позволяют управлять поведением Активностей в стеке задач.
Одним из таких атрибутов является noHistory. Если он в файле манифеста устанавливается для Активности в true, то эта Активность не будет сохраняться в стеке задачи, когда пользователь ее покинет.
Точно такое же действие имеет флаг запуска Активности FLAG_ACTIVITY_NO_HISTORY.
Рассмотрим это быстренько на примерах. Для этого приложения АР0003 и АР0004 прошли очередной этап эволюции. В приложении АР0003 была добавлена Активность К, а в файле манифеста для нее установлен параметр noHistory="true". Так же в Активности А была добавлена кнопка для запуска Активности К. В приложении АР0004 в Активность А была добавлена кнопку запуска Активности В с флагом FLAG_ACTIVITY_NO_HISTORY.
И так запускаем АР0003
Жмем Start Act K
Теперь у нас в задаче 24 две Активности и стек имеет вид А-К. Нажмем Info и посмотрим логи
Теперь жмем Start Activity A
Обращаем внимание что это новый экземпляр Активности А. Стек задачи сейчас содержит ТРИ Активности и имеет вид А-К-А. Нажмем Info чтобы в этом убедиться
Теперь жмем кнопку ОБРАТНО
И мы вернулись в первый экземпляр Активности А, который нам сообщил что он уже был запущен. Стек задачи 24 сейчас состоит из ОДНОЙ Активности А. Активность К была уничтожена, так как для нее был определен атрибут noHistory="true". Посмотрим логи
И так из логов видим, что Активность К сохранялась в стеке до нажатия кнопки ОБРАТНО, по нажатию этой кнопки сработал метод onDestroy для этой Активности, ну и, естественно, для верхней Активности А.
Жмем ОБРАТНО и выходим из приложения АР0003 и запускаем приложение АР0004 и вводим любой текст в поля
Жмем кнопку Start B NoHistory flag
И жмем кнопку Start Activity C
Сейчас все как в классике. Стек задачи 25 содержит ТРИ Активности и имеет вид А-В-С. Нажмем Info чтобы в этом убедиться
Теперь жмем кнопку ОБРАТНО
И попадаем не в Активность В, а в Активность А, так как Активность В была уничтожена поскольку была запущена с флагом FLAG_ACTIVITY_NO_HISTORY.
Посмотрим логи
Здесь все более наглядно чем в предыдущем примере, так как Активности имеют разное название. Мы видим что по кнопке обратно Активность С перешла в паузу, потом была уничтожена Активность В, и затем уничтожена Активность С.
То есть поведение точно такое же как и с атрибутом noHistory.
Комментариев нет:
Отправить комментарий