13 октября 2014 г.

Задачи и обратный стек (Tasks and back stack). Часть 32 (практика)

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

Одним из таких атрибутов является noHistory. Если он в файле манифеста устанавливается для Активности в true, то эта Активность не будет сохраняться в стеке задачи, когда пользователь ее покинет.

Точно такое же действие имеет флаг запуска Активности FLAG_ACTIVITY_NO_HISTORY.

Рассмотрим это быстренько на примерах. Для этого приложения АР0003 и АР0004 прошли очередной этап эволюции. В приложении АР0003 была добавлена Активность К, а в файле манифеста для нее установлен параметр noHistory="true". Так же в Активности А была добавлена кнопка для запуска Активности К. В приложении АР0004 в Активность А была добавлена кнопку запуска Активности В с флагом FLAG_ACTIVITY_NO_HISTORY.

И так запускаем АР0003

NH0001

Жмем Start Act K

NH0002

Теперь у нас в задаче 24 две Активности и стек имеет вид А-К. Нажмем Info и посмотрим логи

NH0003

Теперь жмем Start Activity A

NH0004

Обращаем внимание что это новый экземпляр Активности А. Стек задачи сейчас содержит ТРИ Активности и имеет вид А-К-А. Нажмем Info чтобы в этом убедиться

NH0005

Теперь жмем кнопку ОБРАТНО

NH0006

И мы вернулись в первый экземпляр Активности А, который нам сообщил что он уже был запущен. Стек задачи 24 сейчас состоит из ОДНОЙ Активности А. Активность К была уничтожена, так как для нее был определен атрибут noHistory="true". Посмотрим логи

NH0007

И так из логов видим, что Активность К сохранялась в стеке до нажатия кнопки ОБРАТНО, по нажатию этой кнопки сработал метод onDestroy для этой Активности, ну и, естественно, для верхней Активности А.

Жмем ОБРАТНО и выходим из приложения АР0003 и запускаем приложение АР0004 и вводим любой текст в поля

NH0008

Жмем кнопку Start B NoHistory flag

NH0009

И жмем кнопку Start Activity C

NH0010

Сейчас все как в классике. Стек задачи 25 содержит ТРИ Активности и имеет вид А-В-С. Нажмем Info чтобы в этом убедиться

NH0011

Теперь жмем кнопку ОБРАТНО

NH0012

И попадаем не в Активность В, а в Активность А, так как Активность В была уничтожена поскольку была запущена с флагом FLAG_ACTIVITY_NO_HISTORY.

Посмотрим логи

NH0013

Здесь все более наглядно чем в предыдущем примере, так как Активности имеют разное название. Мы видим что по кнопке обратно Активность С перешла в паузу, потом была уничтожена Активность В, и затем уничтожена Активность С.

То есть поведение точно такое же как и с атрибутом noHistory.

Комментариев нет:

Отправить комментарий