Приложения пережили очередную мутацию. В Активности А приложения АР0003 добавлена кнопка запуска Активности D этого же приложения с флагом FLAG_ACTIVITY_CLEAR_TOP.
В Активности D приложения АР0004 добавлена кнопка запуска Активности С этого же приложения. В Активности С приложения АР0004 добавлена кнопку запуска Активности D этого же приложения с флагом FLAG_ACTIVITY_CLEAR_TOP.
Итак запускаем приложение АР0004
Жмем Start Activity B
Жмем Start Activity C
Жмем Start Activity D и в текстовом поле Активности D вводим любой текст
И так стек задачи 12 сейчас содержит четыре Активности приложения АР0004 и имеет вид A-B-C-D. Нажмем кнопку Info чтобы убедиться в этом
Теперь жмем кнопку Start Act C
Теперь стек задачи 12 содержит ПЯТЬ Активностей и имеет вид A-B-C-D-C. То есть у на сейчас два экземпляра Активности С, один из которых сейчас на вершине стека.
Теперь жмем кнопку Start Act D CLEAR TOP, которая запустит Активность D приложения AP0004 с флагом FLAG_ACTIVITY_CLEAR_TOP. Так же помним что мы вводили свой текст в текстовом поле Активности D.
Мы видим что Активность D запущена впервые и текста введенного нами нет, так как это новый экземпляр Активности D. И в задаче 12 сейчас не ШЕСТЬ Активностей как могло показаться а ЧЕТЫРЕ и стек задачи 12 имеет вид A-B-C-D, так как Активность С была уничтожена, а Активность D уничтожена и создана заново. Поскольку при запуске уже существующей в данной задачи Активности с флагом FLAG_ACTIVITY_CLEAR_TOP происходит передача фокуса на эту Активность, а все Активности находящиеся в стеке сверху нее уничтожаются. Но поскольку в данном случае Активность D имеет параметр запуска “standard”, то произошло ее уничтожение и создание заново.
Посмотрим логи
Все как описано в альма-матер
Теперь нажмем кнопку Info чтобы убедиться что в стеке задачи 12 сейчас ЧЕТЫРЕ Активности и он имеет вид A-B-C-D.
Здесь мы видим поведение похожее на launchMode=“singleTask” в том что, все активности находящиеся сверху вызываемой уничтожаются, но разница в том, что в singleTask Активность может существовать только в единственном экземпляре, а в нашем случае экземпляров Активности D приложения AP0004 может быть несколько.
Давайте в этом убедимся и введем в текстовом поле Активности D любой текст
И нажмем кнопку HOME и затем запустим приложение AP0003
И далее нажмем кнопку Start D AP0004 CLEAR TOP flag
Мы видим что был создан еще один экземпляр Активности D в задаче 23, а не произошло переключения на существующую Активность D в задаче 12.
Нажмем кнопку Info чтобы убедиться в этом
Теперь выходим из всех приложений и запускаем АР0003
Жмем Start Activity B
Жмем Start Activity C
Жмем Start Activity D и вводим любой текст в текстовом поле Активности D
Сейчас стек задачи 25 содержит ЧЕТЫРЕ Активности приложения АР0003 и имеет вид A-B-C-D.
Жмем Start Activity A
Как видим был запущен еще один экземпляр Активности А и стек сейчас содержит ПЯТЬ Активностей и имеет вид A-B-C-D-A.
Теперь жмем кнопку Start D AP0003 CLEAR TOP
Как видим мы попали в существующий в данной задаче 25 экземпляр Активности D и теперь стек задачи 25 содержит ЧЕТРЫЕ Активности и имеет вид A-B-C-D, а Активность А была уничтожена, так как она находилась в стеке над вызванной нами Активностью D.
Нажмем кнопку Info чтобы в этом убедиться
Все как описано в альма-матер.
Теперь чтобы убедиться, что и в данном случае если мы вызовем Активность D приложения Ap0003 из приложения АР0004 будет создан еще один экземпляр Активности D в другом таске нажмем кнопку HOME и запустим приложение АР0004
И нажмем кнопку Start D AP0003 CLEAR TOP
Как видим Активность D приложения АР0003 была запущена в задаче 25 и стек это задачи содержит две Активности: Активность А приложения АР0003 и Активность D приложения АР0004 и имеет вид A-D.
Нажмем кнопку Info чтобы убедиться в этом
Все как доктор описал
Комментариев нет:
Отправить комментарий