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

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

Приложения пережили очередную мутацию. В Активности А приложения АР0003 добавлена кнопка запуска Активности D этого же приложения с флагом FLAG_ACTIVITY_CLEAR_TOP.

В Активности D приложения АР0004 добавлена кнопка запуска Активности С этого же приложения. В Активности С приложения АР0004 добавлена кнопку запуска Активности D этого же приложения с флагом FLAG_ACTIVITY_CLEAR_TOP.

Итак запускаем приложение АР0004

CT00001

Жмем Start Activity B

CT00002

Жмем Start Activity C

CT00003

Жмем Start Activity D и в текстовом поле Активности D вводим любой текст

CT00004

И так стек задачи 12 сейчас содержит четыре Активности приложения АР0004 и имеет вид A-B-C-D. Нажмем кнопку Info чтобы убедиться в этом

CT00005

Теперь жмем кнопку Start Act C

CT00006

Теперь стек задачи 12 содержит ПЯТЬ Активностей и имеет вид A-B-C-D-C. То есть у на сейчас два экземпляра Активности С, один из которых сейчас на вершине стека.

Теперь жмем кнопку Start Act D CLEAR TOP, которая запустит Активность D приложения AP0004 с флагом FLAG_ACTIVITY_CLEAR_TOP. Так же помним что мы вводили свой текст в текстовом поле Активности D.

CT00007

Мы видим что Активность D запущена впервые и текста введенного нами нет, так как это новый экземпляр Активности D. И в задаче 12 сейчас не ШЕСТЬ Активностей как могло показаться а ЧЕТЫРЕ и стек задачи 12 имеет вид A-B-C-D, так как Активность С была уничтожена, а Активность D уничтожена и создана заново. Поскольку при запуске уже существующей в данной задачи Активности с флагом FLAG_ACTIVITY_CLEAR_TOP происходит передача фокуса на эту Активность, а все Активности находящиеся в стеке сверху нее уничтожаются. Но поскольку в данном случае Активность D имеет параметр запуска “standard”, то произошло ее уничтожение и создание заново.

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

CT00008

Все как описано в альма-матер

Теперь нажмем кнопку Info чтобы убедиться что в стеке задачи 12 сейчас ЧЕТЫРЕ Активности и он имеет вид A-B-C-D.

CT00009

Здесь мы видим поведение похожее на launchMode=“singleTask” в том что, все активности находящиеся сверху вызываемой уничтожаются, но разница в том, что в singleTask Активность может существовать только в единственном экземпляре, а в нашем случае экземпляров Активности D приложения AP0004 может быть несколько.

Давайте в этом убедимся и введем в текстовом поле Активности D любой текст

CT00010

И нажмем кнопку HOME и затем запустим приложение AP0003

CT00011

И далее нажмем кнопку Start D AP0004 CLEAR TOP flag

CT00012

Мы видим что был создан еще один экземпляр Активности D в задаче 23, а не произошло переключения на существующую Активность D в задаче 12.

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

CT00013

Теперь выходим из всех приложений и запускаем АР0003

CT00014

Жмем Start Activity B

CT00015

Жмем Start Activity C

CT00016

Жмем Start Activity D и вводим любой текст в текстовом поле Активности D

CT00017

Сейчас стек задачи 25 содержит ЧЕТЫРЕ Активности приложения АР0003 и имеет вид A-B-C-D.

Жмем Start Activity A

CT00018

Как видим был запущен еще один экземпляр Активности А и стек сейчас содержит ПЯТЬ Активностей и имеет вид A-B-C-D-A.

Теперь жмем кнопку Start D AP0003 CLEAR TOP

CT00019

Как видим мы попали в существующий в данной задаче 25 экземпляр Активности D и теперь стек задачи 25 содержит ЧЕТРЫЕ Активности и имеет вид A-B-C-D, а Активность А была уничтожена, так как она находилась в стеке над вызванной нами Активностью D.

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

CT00020

Все как описано в альма-матер.

Теперь чтобы убедиться, что и в данном случае если мы вызовем Активность D приложения Ap0003 из приложения АР0004 будет создан еще один экземпляр Активности D в другом таске нажмем кнопку HOME и запустим приложение АР0004

CT00021

И нажмем кнопку Start D AP0003 CLEAR TOP

CT00022

Как видим Активность D приложения АР0003 была запущена в задаче 25 и стек это задачи содержит две Активности: Активность А приложения АР0003 и Активность D приложения АР0004 и имеет вид A-D.

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

CT00023

Все как доктор описал Улыбка

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

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