До сих пор мы разбирались с самыми простыми параметрами launchMode: standard и singleTop. Теперь двинемся дальше и будем разбирать параметр singleTask. Если уже забыли что это такое, то вспомнить можно тут.
И так, как я уже говорил, в приложении AP0003 Активность C имеет launchMode=”singleTask”.
Запустим приложение AP0003 и последовательно запустим Активности A, B и C.
Ну и логи для порядку
Тут все стандартно и обычно
И в Активности С введем свой текст, чтобы ее можно было однозначно отличить
Замечаем что сейчас в нашей задаче 12 три активности A-B-C.
Теперь далее запускаем активности D, A, B
Замечаем, что сейчас в нашей задаче 12 ШЕСТЬ Активностей: A-B-C-D-A-B. То есть у нас по два разных экземпляра Активностей А и B.
Нажмем кнопку Info
Сейчас у нас на вершине Активность В.
Теперь нажмем кнопку Start Activity C и посмотрим что будет.
Здесь есть много чего посмотреть. Во первых, обращаем внимание, что мы видим введенный нами текст. Это означает, что система перенаправила нас на уже существующую Активность С, а не создала новую. А так же что Активностей в нашей задаче 12 сейчас ТРИ, а до этого было ШЕСТЬ. То есть все Активности, которые были запущены после запуска Активности С были уничтожены. Что видно из логов.
До запуска Активности С наш стек имел вид A-B-C-D-A-B, а после запуска A-B-C, таким образом последние три Активности D-A-B были уничтожены. То есть, все Активности которые были в стеке выше Активности С были уничтожены. Об этом кстати в официальной документации в альма-матер ни слова. Практика критерий истины. Об этом упоминается, так же, в этой статье. Видимо человек сам проделал эти же эксперименты.
Из логов, так же видно, в какой последовательности уничтожаются Активности находящиеся выше Активности С.
Так же стоит заметить, что поскольку Активность С принадлежит тому же приложению из которого была запущена, новая задача для нее не была создана, она осталась в той же задаче что и другие Активности данного приложения. Это тоже стоит взять на заметку, так как это тоже ни где не описано.
Теперь нажмем три раза кнопку ОБРАТНО и выйдем из приложения AP0003.
Теперь запускаем приложение AP0004
Запоминаем что в задаче 16 сейчас у нас одна Активность А из приложения AP0004. Так же нажмем Info и посмотрим логи
Далее жмем кнопку Start C AP0003
Здесь опять много интересного. Активность С была создана в новой задаче 17 и она единственная Активность в этой задаче.
Посмотрим логи
Теперь нажмем кнопку Info и снова глянем логи
В этих логах тоже много инфы для медитации и разбора. Это лог с начала запуска приложения AP0004 (первые четыре строки), затем нажатие кнопки Info в нем (строки 5-12), затем запуск Активности С в приложении АР0003 и нажатие кнопки Info в Активности С из которого видно, что сейчас у нас есть ДВЕ задачи в каждой из которых по одной Активности. Задача 16 содержит Активность А из приложения АР0004, а задача 17 содержит Активность С из приложения АР0003. Так же видно, что каждая Активность работает в процессе своего приложения.
Теперь введем текст в Активности С
И нажмем Start Activity D
Теперь видим что в задаче 17 у нас уже две Активности С и D, а стек задачи 17 имеет вид C-D. Нажмем кнопку Info чтобы убедится в этом.
И так, задача 16 у нас содержит всего одну Активность А из приложения АР0004, а задача 17 содержит ДВЕ Активности C и D из приложения AP0003.
Теперь нажмем кнопку Start B AP0004
Теперь в задаче 17 ТРИ Активности и стек имеет вид C-D-B. Причем Активности С и D принадлежат приложению AP0003, а Активность В приложению АР0004. Посмотрим логи
Из логов видно что Активность В принадлежит задаче 17, но работает в процессе приложения АР0004.
Нажмем кнопку Info
Собственно это и подтверждает что уже сказано было выше. Задача 17 содержит ТРИ Активности C-D-B.
Теперь нажмем кнопку HOME и перейдем в приложение AP0004
Обращаем внимание, что Активность сообщает нам что она уже была запущена, ее задача 16 и в ней одна Активность.
Ну и логи о наших последних действиях
Видим что Активность В в задаче 17 была остановлена, а Активность А в задаче 16 получила фокус.
Теперь нажимаем кнопку Start C AP0003
Как видим получила фокус наша Активность С из задачи 17. В ней есть введенный нами текст. Но вот счетчик опять сбился. Это если будет время пофиксю. Сейчас в задаче 17, по логике вещей должна быть одна Активность С, так как две другие D и В должны были быть уничтожены.
Логи это подтверждают. Для пущей надежности нажмем Info
Собственно вывод Info это подтвердил и выдал правильную информацию о количестве Активностей в каждой задаче.
Теперь нажмем кнопку ОБРАТНО
И нажмем кнопку Info
Как видим после уничтожения Активности С задача 17 так же прекратила свое существование и у нас теперь только одна задача 16 с одной Активностью А.
Так же стоит запомнить, для следующего эксперимента, что нажав на кнопку ОБРАТНО мы попали в Активность А, задачи 16, то есть туда от куда была запущена Активность С.
Теперь нажмем кнопку HOME и запустим приложение AP0003
Оно запустилось в новой задаче. Это уже все известно и понятно. Далее запустим Активности В и С.
Видим что Активности В и С были запущены в задаче 18 и сейчас в ней три Активности. Стек задачи 18 имеет вид A-B-C. А стек задачи 16 имеет вид A. Нажмем Info чтобы убедится в этом.
Теперь в Активности С введем текст, дабы отличать ее.
Нажмем HOME и запустим приложение AP004
И в нем нажмем кнопку Start C AP0003
Увидим нашу Активность С и текст введенный нами в ней. А теперь еще один интересный момент!
Нажмем кнопку ОБРАТНО, и как казалось бы должны вернуться в Активность А приложения АР0004, но это не так. Так как в альма-матер описано другое поведение. Жмем кнопку ОБРАТНО и видим
То есть произошло переключение на стек задачи 18. Теперь в задаче 18 ДВЕ Активности А и В. Жмем еще раз кнопку ОБРАТНО.
Мы вернулись в Активность А приложения АР003. Теперь еще раз жмем кнопку ОБРАТНО
И только сейчас мы вернулись в Активность А приложения АР0004 задача 16.
Собственно на опыте убедились в том что нарисовано на этой диаграмме
Если забыли что за диаграмма, то стоит еще раз прочитать статейку из альма-матер.
На этом про singleTask вроде все.
Комментариев нет:
Отправить комментарий