14 мая 2014 г.

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

До сих пор мы разбирались с самыми простыми параметрами launchMode: standard и singleTop. Теперь двинемся дальше и будем разбирать параметр singleTask. Если уже забыли что это такое, то вспомнить можно тут.

И так, как я уже говорил, в приложении AP0003 Активность C имеет launchMode=”singleTask”.

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

ST0001

ST0002

ST0003

Ну и логи для порядку

ST0004

Тут все стандартно и обычно

И в Активности С введем свой текст, чтобы ее можно было однозначно отличить

ST0005

Замечаем что сейчас в нашей задаче 12 три активности A-B-C.

Теперь далее запускаем активности D, A, B

ST0006

ST0007

ST0008

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

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

ST0009

Сейчас у нас на вершине Активность В.

Теперь нажмем кнопку Start Activity C и посмотрим что будет.

ST0010

Здесь есть много чего посмотреть. Во первых, обращаем внимание, что мы видим введенный нами текст. Это означает, что система перенаправила нас на уже существующую Активность С, а не создала новую. А так же что Активностей в нашей задаче 12 сейчас ТРИ, а до этого было ШЕСТЬ. То есть все Активности, которые были запущены после запуска Активности С были уничтожены. Что видно из логов.

ST0011

До запуска Активности С наш стек имел вид A-B-C-D-A-B, а после запуска A-B-C, таким образом последние три Активности D-A-B были уничтожены. То есть, все Активности которые были в стеке выше Активности С были уничтожены. Об этом кстати в официальной документации в альма-матер ни слова. Практика критерий истины. Об этом упоминается, так же, в этой статье. Видимо человек сам проделал эти же эксперименты.

Из логов, так же видно, в какой последовательности уничтожаются Активности находящиеся выше Активности С.

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

Теперь нажмем три раза кнопку ОБРАТНО и выйдем из приложения AP0003.

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

ST0012

Запоминаем что в задаче 16 сейчас у нас одна Активность А из приложения AP0004. Так же нажмем Info и посмотрим логи

ST0013

Далее жмем кнопку Start C AP0003

ST0014

Здесь опять много интересного. Активность С была создана в новой задаче 17 и она единственная Активность в этой задаче.

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

ST0015

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

ST0016

В этих логах тоже много инфы для медитации и разбора. Это лог с начала запуска приложения AP0004 (первые четыре строки), затем нажатие кнопки Info в нем (строки 5-12), затем запуск Активности С в приложении АР0003 и нажатие кнопки Info в Активности С из которого видно, что сейчас у нас есть ДВЕ задачи в каждой из которых по одной Активности. Задача 16 содержит Активность А из приложения АР0004, а задача 17 содержит Активность С из приложения АР0003. Так же видно, что каждая Активность работает в процессе своего приложения.

Теперь введем текст в Активности С

ST0017

И нажмем Start Activity D

ST0018

Теперь видим что в задаче 17 у нас уже две Активности С и D, а стек задачи 17 имеет вид C-D. Нажмем кнопку Info чтобы убедится в этом.

ST0019

И так, задача 16 у нас содержит всего одну Активность А из приложения АР0004, а задача 17 содержит ДВЕ Активности C и D из приложения AP0003.

Теперь нажмем кнопку Start B AP0004

ST0020

Теперь в задаче 17 ТРИ Активности и стек имеет вид C-D-B. Причем Активности С и D принадлежат приложению AP0003, а Активность В приложению АР0004. Посмотрим логи

ST0021

Из логов видно что Активность В принадлежит задаче 17, но работает в процессе приложения АР0004.

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

ST0022

Собственно это и подтверждает что уже сказано было выше. Задача 17 содержит ТРИ Активности C-D-B.

Теперь нажмем кнопку HOME и перейдем в приложение AP0004

ST0023

Обращаем внимание, что Активность сообщает нам что она уже была запущена, ее задача 16 и в ней одна Активность.

Ну и логи о наших последних действиях

ST0024

Видим что Активность В в задаче 17 была остановлена, а Активность А в задаче 16 получила фокус.

Теперь нажимаем кнопку Start C AP0003

ST0025

Как видим получила фокус наша Активность С из задачи 17. В ней есть введенный нами текст. Но вот счетчик опять сбился. Это если будет время пофиксю. Сейчас в задаче 17, по логике вещей должна быть одна Активность С, так как две другие D и В должны были быть уничтожены.

ST0026

Логи это подтверждают. Для пущей надежности нажмем Info

ST0027

Собственно вывод Info это подтвердил и выдал правильную информацию о количестве Активностей в каждой задаче.

Теперь нажмем кнопку ОБРАТНО

ST0023

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

ST0028

Как видим после уничтожения Активности С задача 17 так же прекратила свое существование и у нас теперь только одна задача 16 с одной Активностью А.

Так же стоит запомнить, для следующего эксперимента, что нажав на кнопку ОБРАТНО мы попали в Активность А, задачи 16, то есть туда от куда была запущена Активность С.

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

ST0029

Оно запустилось в новой задаче. Это уже все известно и понятно. Далее запустим Активности В и С.

ST0030

ST0031

Видим что Активности В и С были запущены в задаче 18 и сейчас в ней три Активности. Стек задачи 18 имеет вид A-B-C. А стек задачи 16 имеет вид A. Нажмем Info чтобы убедится в этом.

ST0032

Теперь в Активности С введем текст, дабы отличать ее.

ST0033

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

ST0023

И в нем нажмем кнопку Start C AP0003

ST0033

Увидим нашу Активность С и текст введенный нами в ней. А теперь еще один интересный момент!

Нажмем кнопку ОБРАТНО, и как казалось бы должны вернуться в Активность А приложения АР0004, но это не так. Так как в альма-матер описано другое поведение. Жмем кнопку ОБРАТНО и видим

ST0034

То есть произошло переключение на стек задачи 18. Теперь в задаче 18 ДВЕ Активности А и В. Жмем еще раз кнопку ОБРАТНО.

ST0035

Мы вернулись в Активность А приложения АР003. Теперь еще раз жмем кнопку ОБРАТНО

ST0036

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

Собственно на опыте убедились в том что нарисовано на этой диаграмме

diagram_backstack_singletask_multiactivity

Если забыли что за диаграмма, то стоит еще раз прочитать статейку из альма-матер.

На этом про singleTask вроде все.

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

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