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

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

Теперь уже поговорим о taskAffinity в разных вариантах применения этого параметра.

И так приложения AP0003 и АР0004 опять сильно мутировали.

В приложение АР0003 было добавлено три Активности: E, F и G.

Для Активности Е определены параметры:
taskAffinity="com.example.ap0004"
allowTaskReparenting="true"

Для Активности F определен параметр:
taskAffinity="com.example.ap0004"

Для Ативности G определен параметр:
allowTaskReparenting="true"

Так же в Активность А приложения АР0003 добавлены кнопки:

Start Activity E, Start Act F и Start Activity G – которые делают стандартный запуск соответствующих Активностей.

Start Activity F New Task – запускает Активность F с флагом FLAG_ACTIVITY_NEW_TASK.

В Активность С приложения АР0004 добавлена кнопка Start E AP003 (стандартный запуск).

И так рассмотрим сперва случай с примером приложения из статьи в альма-матер на эту тему.

Запускаем приложение AP0004

TA00001

Запоминаем что ID нашей  задачи равен 35.

Жмем Start G AP0003

TA00002

Видим что Активность G приложения АР0003 была запущена в задаче 35. То есть стек задачи 35 сейчас содержит две Активности и имеет вид A-G.

Нажмем кнопку Info

TA00003

Вводим текст в поле

TA00004

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

И что мы видим!

TA00005

Что называется найди десять различий! Во первых это уже задача 36. Во вторых мы видим что Активность уже была запущена и видим нашу надпись! То есть это тот же самый экземпляр Активности который раньше был в задаче 35. То есть он переместился из стека задачи 35 в стек задачи 36.

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

TA00006

Теперь нажмем кнопку Info

TA00007

Мы видим что в стеке задачи 35 сейчас одна Активность А из которой мы собственно и запустили Активность G, которая перешла в стек задачи 36. А в стеке задачи 36 сейчас ДВЕ активности А и G. Но Активность А мы не запускали и ее запуска не видно ни где в логах, что кстати очень интересно.

Это означает что поскольку приложение АР0003 не было запущено и не было родного таска для Активности G, то этот таск создался и там виртуально присутствует корневая Активность А этого приложения.

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

TA00008

И вот она Активность А задачи 36. Но мы видим что она сообщает что она была запущена впервые! Смотрим логи

TA00009

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

Соответственно в задачах 35 и 36 сейчас по одной Активности А.

TA00010 

Больше пока ни чем в этом посте грузить не буду. Так как и тут есть на что помедитировать Улыбка

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

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