18 апреля 2014 г.

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

Мои приложения AP0003 и AP0004 сделали очередной виток эволюции. Улыбка

Теперь в каждой Активности приложений есть кнопка Info при нажатии которой в лог выводится информация об обоих приложениях такая как:

  • TaskID каждого приложения
  • Количество активностей в задаче
  • Имя корневой Активности
  • Имя верхней Активности
  • Thread ID приложения
  • Process ID приложения

Два последних пункта дублируют то, что выводится в LogCat, но это сделано для лучшей наглядности.

Кроме того в обоих приложениях в заголовок каждой Активности помещается следующая информация:

  • Имя приложения
  • Имя Активности
  • Task ID приложения

Так же, в Активности А приложения AP0004 теперь две кнопки для запуска Активности С и Активности D из приложения AP0003.

Активность D в приложении AP0003 имеет параметр запуска singleTop, в приложении AP0004 у нее стандартный параметр запуска.

В приложении AP0003, все Активности имеют поля для ввода текста, в приложении AP0004 только Активности A и B имеют поля для ввода текста.

И так запустим приложение AP0003 и последовательно запустим Активности A, B, C и D.

TSK0024

TSK0025

TSK0026

TSK0027

Мы видим, что в текущей задаче с TaskID=4 сейчас находится четыре Активности A-B-C-D. Активность А является корневой, а Активность D находится на вершине стека.

Теперь нажмем копку Info и посмотрим лог:

TSK0028

Обращаем внимание, что и корневая и верхняя Активности принадлежат одному приложению – AP0003.

Собственно лог, еще раз подтвердил, то что я написал выше.

Теперь в поле ввода текста в Активности D введем какой-нибудь текст для того, чтобы однозначно ее идентифицировать, поскольку, потом, мы так же запустим Активность D из приложения AP0004.

TSK0029

Затем нажмем кнопку HOME и снова запустим приложений AP0003, чтобы убедится что наша Активность D в приложении AP0003 сохранила текст, введенный в поле.

TSK0030

Теперь снова жмем кнопку HOME и запускаем приложение AP0004.

TSK0031

Замечаем, что приложение AP0004 имеет TaskID=6 и что в текущей задаче пока одна Активность A. Нажмем на кнопку Info и посмотрим что там будет:

TSK0032

Видим много интересного. В блоке отмеченным желтым мы видим информацию о задаче с TaskID=6, что в нем одна Активность А и пока она же является и корневой и верхней. Желтый блок это информация о приложении AP0004. Зеленым блоком отмечена информация о приложении AP0003, в котором как мы уже говорили есть четыре Активности A-B-C-D, А – в корне и D на вершине.

TIP и PID в обоих блоках одинаковые, так как выполнение нажатия кнопки Info произошло из приложения AP0004.

Теперь в Активности А приложения AP0004, нажмем кнопку Start D AP0003. Напомню что Активность D в приложении AP0003 имеет параметр запуска singleTop.

 TSK0033

Обращаем внимание, что был создан новый экземпляр Активности D и помещен в задачу приложения AP0004 (TaskID=6). У приложения AP0003 TaskID=5.

И снова нажмем кнопку Info:

TSK0034

Тут уже много интересных вещей для анализа и понимания. Приложение AP0004 отмечено желтым цветом, приложение AP0003 – зеленым.

И так мы видим, что Активность D, принадлежащая приложению AP0003, была запущена из Активности А, приложения AP0004. И в задаче приложения AP0004 с TaskID=6 был создан новый экземпляр Активности D. Теперь в задаче приложения AP0004, находится две Активности и стек имеет вид A-D. Причем Активность А в корне принадлежит приложению AP0004, а Активность D находящаяся на вершине стека, принадлежит приложению AP0003, но обе они находятся в стеке задачи приложения AP0004.

Стек же приложения AP0003, остался не тронутым. Там по прежнему четыре Активности и стек имеет вид A-B-C-D.

Кроме того надо обратить внимание, что экземпляр Активности D из приложения AP0003, хотя и находится в стеке задачи приложения AP0004 с TaskID=6, выполняется в процессе приложения AP0003 имеющим PID=1428. А у приложения AP0004 PID=1469.

Вообще интересная тема для медитации Улыбка

Теперь введем другой текст в поле Активности D, чтобы идентифицировать ее, как принадлежащую к задаче приложения AP0004. Нажмем кнопку HOME и снова запустим приложение AP0004.

TSK0035

Как видим текст сохранился. Еще раз обращаем внимание на то, что TaskID=6 и что в этой задаче сейчас две Активности A и D.

Теперь нажмем кнопку Start Activity D. И увидим, что новый экземпляр не был создан, так как у Активности D в приложении AP0003 определен параметр запуска singleTop. Скрин приводить не буду, так как он тот же самый. А в логах будет видно, что Активность D перешла в режим паузы и потом была снова восстановлена.

То есть мы убедились, что если Активность имеет параметр singleTop, то ее новый экземпляр не может быть создан, только в случае если ее пытаться запустить из текущей задачи и если она в этот момент находится на вершине стека. Но другой экземпляр данной Активности может быть запущен из другой задачи.

Теперь, для следующего эксперимента, выйдем из обоих приложений. И запустим сперва приложение AP0004.

TSK0036

Оно уже было запущено в новой задаче (TaskID=12). Далее нажимаем кнопку Info.

TSK0037

Но, что интересно, хотя TaskID приложения поменялся, процесс остался тот же. Далее нажмем кнопку Start D AP0003.

TSK0038

Все, как положено, в задаче с TaskID=12 сейчас две Активности А и D. Жмем кнопку Info.

TSK0039

Видно, что после нажатия кнопки Start D AP0003, Активность А перешла в остановленное состояние, и была запущена Активность D, причем она легла в задачу (стек) приложения AP0004, но была запущенна в процессе приложения AP0003, который кстати остался, так же неизменным (PID=1428), даже не смотря на то, что мы, до этого вышли из приложения AP0003, о чем кстати и говорит вывод информации по кнопке Info. Приложение AP0003, сейчас не выполняется.

Введем текст в текстовом поле Активности D:

TSK0040

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

TSK0041

Поскольку приложение было запущено заново, оно было запущено в новой задаче (TaskID=13).

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

TSK0042

Теперь видно что работает два приложения AP0004, в котором две Активности A и D (отмечено в логе желтым цветом). И приложение AP0003 в котором сейчас одна Активность А (зеленый цвет).

В приложении AP0003, запустим последовательно активности B-C-D и в Активности D введем текст

TSK0043

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

TSK0044

Что называется найди 10 различий Улыбка

И так в приложении AP0004 у нас сейчас ДВЕ активности A и D. Активность А из приложения AP0004 и Активность D из приложения AP0003.

В приложении AP0003 у нас сейчас ЧЕТЫРЕ активности A-B-C-D и все они из приложения AP0003.

Кроме того, текст в обоих Активностях D разный, что лишний раз подтверждает, что это разные экземпляры одной Активности находящиеся в разных задачах, но обе они выполняются в одном процессе приложения AP0003.

Вот такой кардебалет Улыбка

Код приложений пока не привожу, так как возникла очередная идейка, по их модификации Улыбка

Но тут он особо пока и не нужен, скринов и логов я думаю достаточно для понимания.

Код будет чуть позже, после очередного витка эволюции Улыбка

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

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