Мои приложения 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.
Мы видим, что в текущей задаче с TaskID=4 сейчас находится четыре Активности A-B-C-D. Активность А является корневой, а Активность D находится на вершине стека.
Теперь нажмем копку Info и посмотрим лог:
Обращаем внимание, что и корневая и верхняя Активности принадлежат одному приложению – AP0003.
Собственно лог, еще раз подтвердил, то что я написал выше.
Теперь в поле ввода текста в Активности D введем какой-нибудь текст для того, чтобы однозначно ее идентифицировать, поскольку, потом, мы так же запустим Активность D из приложения AP0004.
Затем нажмем кнопку HOME и снова запустим приложений AP0003, чтобы убедится что наша Активность D в приложении AP0003 сохранила текст, введенный в поле.
Теперь снова жмем кнопку HOME и запускаем приложение AP0004.
Замечаем, что приложение AP0004 имеет TaskID=6 и что в текущей задаче пока одна Активность A. Нажмем на кнопку Info и посмотрим что там будет:
Видим много интересного. В блоке отмеченным желтым мы видим информацию о задаче с TaskID=6, что в нем одна Активность А и пока она же является и корневой и верхней. Желтый блок это информация о приложении AP0004. Зеленым блоком отмечена информация о приложении AP0003, в котором как мы уже говорили есть четыре Активности A-B-C-D, А – в корне и D на вершине.
TIP и PID в обоих блоках одинаковые, так как выполнение нажатия кнопки Info произошло из приложения AP0004.
Теперь в Активности А приложения AP0004, нажмем кнопку Start D AP0003. Напомню что Активность D в приложении AP0003 имеет параметр запуска singleTop.
Обращаем внимание, что был создан новый экземпляр Активности D и помещен в задачу приложения AP0004 (TaskID=6). У приложения AP0003 TaskID=5.
И снова нажмем кнопку Info:
Тут уже много интересных вещей для анализа и понимания. Приложение 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.
Как видим текст сохранился. Еще раз обращаем внимание на то, что TaskID=6 и что в этой задаче сейчас две Активности A и D.
Теперь нажмем кнопку Start Activity D. И увидим, что новый экземпляр не был создан, так как у Активности D в приложении AP0003 определен параметр запуска singleTop. Скрин приводить не буду, так как он тот же самый. А в логах будет видно, что Активность D перешла в режим паузы и потом была снова восстановлена.
То есть мы убедились, что если Активность имеет параметр singleTop, то ее новый экземпляр не может быть создан, только в случае если ее пытаться запустить из текущей задачи и если она в этот момент находится на вершине стека. Но другой экземпляр данной Активности может быть запущен из другой задачи.
Теперь, для следующего эксперимента, выйдем из обоих приложений. И запустим сперва приложение AP0004.
Оно уже было запущено в новой задаче (TaskID=12). Далее нажимаем кнопку Info.
Но, что интересно, хотя TaskID приложения поменялся, процесс остался тот же. Далее нажмем кнопку Start D AP0003.
Все, как положено, в задаче с TaskID=12 сейчас две Активности А и D. Жмем кнопку Info.
Видно, что после нажатия кнопки Start D AP0003, Активность А перешла в остановленное состояние, и была запущена Активность D, причем она легла в задачу (стек) приложения AP0004, но была запущенна в процессе приложения AP0003, который кстати остался, так же неизменным (PID=1428), даже не смотря на то, что мы, до этого вышли из приложения AP0003, о чем кстати и говорит вывод информации по кнопке Info. Приложение AP0003, сейчас не выполняется.
Введем текст в текстовом поле Активности D:
И нажмем кнопку HOME, а затем запустим приложение AP0003
Поскольку приложение было запущено заново, оно было запущено в новой задаче (TaskID=13).
Нажмем кнопку Info
Теперь видно что работает два приложения AP0004, в котором две Активности A и D (отмечено в логе желтым цветом). И приложение AP0003 в котором сейчас одна Активность А (зеленый цвет).
В приложении AP0003, запустим последовательно активности B-C-D и в Активности D введем текст
Нажмем кнопку HOME и запустим приложение AP0004
Что называется найди 10 различий
И так в приложении AP0004 у нас сейчас ДВЕ активности A и D. Активность А из приложения AP0004 и Активность D из приложения AP0003.
В приложении AP0003 у нас сейчас ЧЕТЫРЕ активности A-B-C-D и все они из приложения AP0003.
Кроме того, текст в обоих Активностях D разный, что лишний раз подтверждает, что это разные экземпляры одной Активности находящиеся в разных задачах, но обе они выполняются в одном процессе приложения AP0003.
Вот такой кардебалет
Код приложений пока не привожу, так как возникла очередная идейка, по их модификации
Но тут он особо пока и не нужен, скринов и логов я думаю достаточно для понимания.
Код будет чуть позже, после очередного витка эволюции
Комментариев нет:
Отправить комментарий