17 сентября 2014 г.

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

Выдержка из альма-матер:

FLAG_ACTIVITY_CLEAR_TOP чаще всего используется совместно с флагом FLAG_ACTIVITY_NEW_TASK. При совместном использовании эти флаги позволяют найти существующую в другой задаче Активность и вывести ее на передний план передав ей управление.

Вот этот случай сейчас подробно и рассмотрим.

Приложение АР0004 опять мутировало. В Активность В добавлены две кнопки запуска Активностей D в приложениях АР0003 и АР0004 с двумя вышеупомянутыми флагами. А в Активность D была добавлена кнопка запуска Активности В из приложения АР0004.

Итак запускаем приложение АР0004 и последовательно запускаем все Активности от А до D. И в текстовом поле Активности D вводим любой текст.

NTCT0001

NTCT0002

NTCT0003

NTCT0007

И так сейчас в стеке в задачи 23 находится четыре Активности и стек имеет вид A-B-C-D.

Теперь нажимаем кнопку Start Act В, которая запустит Активность В приложения АР0004.

NTCT0005

Сейчас в стеке задачи 23 уже пять Активностей и стек имеет вид A-B-C-D-В.

Нажмем кнопку Info чтобы в этом убедиться

NTCT0006

Теперь жмем кнопку HOME и запускаем приложение АР0003 и последовательно запускаем Активности A-B-C-D

NTCT0008

NTCT0009

NTCT0010

NTCT0012

Сейчас в стеке задачи 24 у нас четыре Активности и стек имеет вид A-B-C-D. Все Активности в стеке принадлежат приложению АР0003. Теперь жмем кнопку Start B AP0004

NTCT0013

Теперь в стеке задачи 24 тоже пять Активностей и стек имеет вид A-B-C-D-B, но последняя Активность В в стеке задачи 24 принадлежит приложению АР0004.

Теперь напомню, что кнопка Start D NewTask ClearTop запускает Активность D приложения AP0004. Активность D приложения AP0004 у нас есть в стеке задачи 23.

Прежде чем нажать эту кнопку мы нажмем Info

NTCT0014

То есть все как я и говорил Улыбка

Теперь жмем кнопку Start D NewTask ClearTop и помним что сейчас мы находимся в задаче 24

NTCT0015

Произошло переключение на задачу 23 (в которой была уже запущенная Активность D) и передан фокус на Активность D в этой задаче. То есть все как в описании в альма-матер. Но вспомним что над Активностью D в стеке задачи 23 была Активность В. Она была уничтожена. Что тоже соответствует описанному поведению в альма-матер. Так же был уничтожен старый экземпляр Активности D и создан новый. Это тоже соответствует описанию и это надо иметь в виду. То есть мы видим что данные которые мы вводили в текстовом поле Активности D потеряны, так как она была уничтожена.

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

NTCT0016

Активность D была уничтожена потому что она имеет launchMode=“standard”. В общем поведение всех активностей полностью соответствует описанному в альма-матер.

Кроме того произошло переключение на стек задачи 23. То есть если мы сейчас будем жать кнопочку ОБРАТНО, то сперва последовательно закроются Активности D-C-B-A задачи 23, и только потом мы вернемся в задачу 24 в Активность В.

NTCT0017

NTCT0018

NTCT0019

Жмем еще раз ОБРАТНО и только сейчас попадаем в задачу 24

NTCT0020

NTCT0021

NTCT0022

NTCT0023

NTCT0024

В следующей статье рассмотрим другой случай использования этих двух флагов.

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

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