1 октября 2014 г.

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

Напоминаю, что в приложении АР0003

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

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

TA0001

И жмем клавишу Start Act F и вводим любой текст в поле

TA0002

Как видим Активность F была запущена в той же 71 задаче что и Активность А.

Теперь жмем кнопку HOME и запускаем приложение АР0004

TA0003

Как видим, Активность F не перешла в задачу приложения АР0004, так как у нее нет параметра allowTaskReparenting="true". То есть поведение точно такое как описано в альма-матер.

Сейчас в стеке задачи 71 две Активности и стек имеет вид A-F, а в стеке задачи 76 одна Активность А.

Нажмем Info чтобы убедиться

TA0004

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

TA0005

Жмем кнопку Start Activity F NewTask и вводим любой текст в поле

TA0006

Видим что в этот раз Активность F сразу была запущена в новой задаче, так как к интенту был добавлен флаг FLAG_ACTIVITY_NEW_TASK.

То есть у нас теперь две задачи 77 и 78, в каждой из которых по одной Активности, А и F соответственно. Нажмем Info чтобы в этом убедиться

TA0007

Теперь жмем кнопку HOME и запускаем приложение АР0004

TA0008

Приложение АР0004 было запущено с Активности F, которая сейчас является единственной в задаче этого приложения с ID 78. Активность F нам сообщила что она уже была запущена, что так и есть, ведь мы ее запустили из приложения АР0003.

Теперь еще следует обратить внимание на лог выведенный по кнопке Info. В задаче 78 нет Активности А, как было в прошлых случаях. То есть если мы сейчас нажмем кнопку ОБРАТНО, то просто выйдем из приложения АР0004 (задача 78).

Давайте сделаем это и посмотрим лог

TA0009

На это отличие в поведении так же стоит обратить внимание.

Сейчас выходим из приложений АР0004 и АР0003. И заново запускаем приложение АР0004

TA0010

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

TA0011

И так у нас уже есть приложение АР0004 работающее в задаче 80. Теперь жмем Start Activity F NewTask

TA0012

Активность F запустилась в задаче 80 и теперь стек задачи 80 содержит две Активности А и F. А стек задачи 81 одну Активность А.

Чтобы убедиться в этом нажмем Info

TA0013

Так же произошло переключение на стек задачи 80. То есть если мы сейчас нажмем кнопку ОБРАТНО мы не попадем в задачу 81 из которой была запущена Активность F. А попадем в Активность А задачи 80.

Жмем ОБРАТНО

TA0014

И так мы попали в Активность А приложения АР0004 задачи 80.

Теперь еще раз жмем ОБРАТНО

TA0015

И попадаем в Активность А приложения АР0003 задачи 81.

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

На этом рассмотрение taskAffinity мы пока закончим. И перейдем к рассмотрению темы чистки стека.

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

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