Сегодня будем экспериментировать с флагом FLAG_ACTIVITY_CLEAR_TOP.
Мои приложения AP0003 и АР0004 опять мутировали. Напомню что Активность D в приложении AP0003 имеет параметр запуска launchMode="singleTop". А в приложении АР0004 Активность D имеет стандартный параметр запуска.
В Активности А приложения АР0003 добавлена кнопка запуска Активности D приложения AP0004. В Активности А приложения АР0004 добавлена кнопка запуска Активности D приложения АР0003. Обе кнопки запускают активности с флагом FLAG_ACTIVITY_CLEAR_TOP. Так же в Активности D приложений AP0004 и АР0003 добавлена кнопка запуска этой же Активности с флагом FLAG_ACTIVITY_CLEAR_TOP.
Итак запускаем AP003
Обращаем внимание на TaskID и жмем кнопку Start D AP0004 CLEAR TOP flag
Видим что Активность D была запущена в той же задаче что и Активность А приложения AP0003.
Стек задачи 5 содержит две Активности А и D, которые принадлежат приложениям AP0003 и AP0004 соответственно. Наш стек имеет вид A-D. Нажмем кнопку Info и убедимся в этом посмотрев логи
Все так и есть.
Теперь нажмем кнопку Start D CLEAR TOP. Поскольку если мы нажмем кнопку Start Activity D. То будет создана еще одна Активность D, так как Активность D приложения AP0004 имеет стандартный параметр запуска.
Вот здесь есть один интересный момент. Мы видим что Активность D нам сообщает, что она запущена впервые, хотя такого по идее быть не должно, так как фокус должен просто передаться на эту же Активность. Так же счетчик показывает что Активностей в задаче 5 сейчас 3, но он врет и лагает. Их по прежнему две. НО! Активность D была уничтожена и создана заново.
Посмотрим логи
Нажмем кнопку Info чтобы убедится что у нас в задаче 5 по прежнему 2 Активности А и D.
То есть видим, что все это соответствует тому что написано в примечании к поведению Активности имеющей параметр запуска lauchMode=“standard”.
Теперь нажмем два раза кнопку обратно и выйдем из задачи 5 закрыв обе Активности и перейдем к другому примеру.
Теперь запускаем приложение АР0004
Оно у нас запустилось в задаче 6. Жмем кнопку Start D AP0003 CLEAR TOP.
Видим что Активность D была запущена в задаче 6. Сейчас в задаче 6 две Активности А и D приложений AP0004 и AP0003 соответственно и стек имеет вид A-D. Нажмем кнопку Info и глянем логи
Введем какую-нибудь надпись в текстовом поле Активности D
И нажмем кнопку Start D CLEAR TOP
Как видим Активность D сообщила нам что она уже была запущена и текст в текстовом поле сохранился. То есть текущая Активность D не была уничтожена и создана заново, а вместо этого был вызван метод onNewIntent(). То есть в данном случае наблюдаем полное тождество параметру запуска launchMode="singleTop".
Теперь посмотрим логи
Нажмем кнопку Info чтобы убедиться что у нас в задаче 6 по прежнему две активности
В следующем уроке рассмотрим данную немного поглубже.
Комментариев нет:
Отправить комментарий