14 октября 2014 г.

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

Сегодня разберем работу еще одного интересного параметра управления поведением Активностей в стеке – finishOnCloseSystemDialogs.

Этот параметр будучи установленным для Активности в true указывает, что Активность должна быть уничтожена при событии "close system windows". Для примера, такое событие происходит когда нажимается клавиша ДОМОЙ, когда устройство блокируется (выключается экран), когда системный диалог показывает список последних открытых приложений и т.п.

И так приложение АР0003 пережило еще одну мутацию. Была добавлена Активность I и кнопка ее запуска в Активности В.

Запускаем приложение АР0003

CSD0001

Стартуем Активность В

CSD0002

И далее жмем Start Activity I и вводим в поле этой Активности любой текст

CSD0003

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

CSD0004

Все так и есть

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

CSD0005

Теперь у нас в стеке задачи 41 четыре Активности и стек имеет вид A-B-I-A.

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

CSD0006

Как видим мы вернулись в Активность I. И она нам сообщила что уже была запущена, а так же мы видим введенный нами текст. То есть Активность I не была уничтожена.

Запомним этот момент и снова нажмем Start Activity A.

CSD0005

То есть мы вернулись к предыдущему состоянию стека A-B-I-A. Но теперь жмем кнопку ДОМОЙ и смотрим логи

CSD0007

Из логов видим, что при нажатии кнопки ДОМОЙ Активность I была уничтожена и сейчас стек задачи 41 содержит ТРИ Активности и имеет вид A-B-A.

Вернемся снова к приложению АР0003

CSD0008

Верхняя Активность А сообщает нам что она уже была запущена. Нажмем Info чтобы убедиться что в стеке задачи 41 сейчас ТРИ Активности.

CSD0009

Все так и есть. Жмем кнопку ОБРАТНО

CSD0010

Теперь у нас в стеке две Активности и стек имеет вид А-В. Снова жмем Start Activity I и вводим любой текст в поле

CSD0011

Теперь стек задачи 41 содержит ТРИ Активности и имеет вид A-B-I. Далее жмем и удерживаем кнопку домой, чтобы вызвать список недавно открытых приложений

CSD0012

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

CSD0013

То есть мы увидели еще один случай уничтожения Активности I.

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

CSD0010

Видим Активность В, так как Активность I была уничтожена. Снова запускаем Активность I и вводим любой текст

CSD0014

Теперь жмем кнопку питания чтобы заблокировать экран смартфона и смотрим логи

CSD0015

Опять видим, что Активность I была уничтожена и стек задачи 41 сейчас снова содержит ДВЕ Активности и имеет вид А-В.

Разблокируем устройство

CSD0010

И видим нашу Активность В.

Нажимаем два раза ОБРАТНО и выходим из приложения АР0003.

На этом закончим рассмотрение данного параметра. Скажу на заметку только то, что в каком бы месте стека не находилась Активность с параметром finishOnCloseSystemDialogs="true" при наступлении события "close system windows" она всегда будет уничтожена.

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

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