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

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

Сегодня будем экспериментировать с флагом FLAG_ACTIVITY_CLEAR_TOP.

Мои приложения AP0003 и АР0004 опять мутировали. Напомню что Активность D в приложении AP0003 имеет параметр запуска launchMode="singleTop". А в приложении АР0004 Активность D имеет стандартный параметр запуска.

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

Итак запускаем AP003

TOP00001

Обращаем внимание на TaskID и жмем кнопку Start D AP0004 CLEAR TOP flag

TOP00002

Видим что Активность D была запущена в той же задаче что и Активность А приложения AP0003.

Стек задачи 5 содержит две Активности А и D, которые принадлежат приложениям AP0003 и AP0004 соответственно. Наш стек имеет вид A-D. Нажмем кнопку Info и убедимся в этом посмотрев логи

TOP00003

Все так и есть.

Теперь нажмем кнопку Start D CLEAR TOP. Поскольку если мы нажмем кнопку Start Activity D. То будет создана еще одна Активность D, так как Активность D приложения AP0004 имеет стандартный параметр запуска.

TOP00004

Вот здесь есть один интересный момент. Мы видим что Активность D нам сообщает, что она запущена впервые, хотя такого по идее быть не должно, так как фокус должен просто передаться на эту же Активность. Так же счетчик показывает что Активностей в задаче 5 сейчас 3, но он врет и лагает. Их по прежнему две. НО! Активность D была уничтожена и создана заново.

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

TOP00005

Нажмем кнопку Info чтобы убедится что у нас в задаче 5 по прежнему 2 Активности А и D.

TOP00006

То есть видим, что все это соответствует тому что написано в примечании к поведению Активности имеющей параметр запуска lauchMode=“standard”.

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

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

TOP00007

Оно у нас запустилось в задаче 6. Жмем кнопку Start D AP0003 CLEAR TOP.

TOP00008

Видим что Активность D была запущена в задаче 6. Сейчас в задаче 6 две Активности А и D приложений AP0004 и AP0003 соответственно и стек имеет вид A-D. Нажмем кнопку Info и глянем логи

TOP00009

Введем какую-нибудь надпись в текстовом поле Активности D

TOP00010

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

TOP00011

Как видим Активность D сообщила нам что она уже была запущена и текст в текстовом поле сохранился. То есть текущая Активность D не была уничтожена и создана заново, а вместо этого был вызван метод onNewIntent(). То есть в данном случае наблюдаем полное тождество параметру запуска launchMode="singleTop".

Теперь посмотрим логи

TOP00012

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

TOP00013

В следующем уроке рассмотрим данную немного поглубже.

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

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