Выдержка из альма-матер:
FLAG_ACTIVITY_CLEAR_TOP чаще всего используется совместно с флагом FLAG_ACTIVITY_NEW_TASK. При совместном использовании эти флаги позволяют найти существующую в другой задаче Активность и вывести ее на передний план передав ей управление.
Вот этот случай сейчас подробно и рассмотрим.
Приложение АР0004 опять мутировало. В Активность В добавлены две кнопки запуска Активностей D в приложениях АР0003 и АР0004 с двумя вышеупомянутыми флагами. А в Активность D была добавлена кнопка запуска Активности В из приложения АР0004.
Итак запускаем приложение АР0004 и последовательно запускаем все Активности от А до D. И в текстовом поле Активности D вводим любой текст.
И так сейчас в стеке в задачи 23 находится четыре Активности и стек имеет вид A-B-C-D.
Теперь нажимаем кнопку Start Act В, которая запустит Активность В приложения АР0004.
Сейчас в стеке задачи 23 уже пять Активностей и стек имеет вид A-B-C-D-В.
Нажмем кнопку Info чтобы в этом убедиться
Теперь жмем кнопку HOME и запускаем приложение АР0003 и последовательно запускаем Активности A-B-C-D
Сейчас в стеке задачи 24 у нас четыре Активности и стек имеет вид A-B-C-D. Все Активности в стеке принадлежат приложению АР0003. Теперь жмем кнопку Start B AP0004
Теперь в стеке задачи 24 тоже пять Активностей и стек имеет вид A-B-C-D-B, но последняя Активность В в стеке задачи 24 принадлежит приложению АР0004.
Теперь напомню, что кнопка Start D NewTask ClearTop запускает Активность D приложения AP0004. Активность D приложения AP0004 у нас есть в стеке задачи 23.
Прежде чем нажать эту кнопку мы нажмем Info
То есть все как я и говорил
Теперь жмем кнопку Start D NewTask ClearTop и помним что сейчас мы находимся в задаче 24
Произошло переключение на задачу 23 (в которой была уже запущенная Активность D) и передан фокус на Активность D в этой задаче. То есть все как в описании в альма-матер. Но вспомним что над Активностью D в стеке задачи 23 была Активность В. Она была уничтожена. Что тоже соответствует описанному поведению в альма-матер. Так же был уничтожен старый экземпляр Активности D и создан новый. Это тоже соответствует описанию и это надо иметь в виду. То есть мы видим что данные которые мы вводили в текстовом поле Активности D потеряны, так как она была уничтожена.
Посмотрим логи
Активность D была уничтожена потому что она имеет launchMode=“standard”. В общем поведение всех активностей полностью соответствует описанному в альма-матер.
Кроме того произошло переключение на стек задачи 23. То есть если мы сейчас будем жать кнопочку ОБРАТНО, то сперва последовательно закроются Активности D-C-B-A задачи 23, и только потом мы вернемся в задачу 24 в Активность В.
Жмем еще раз ОБРАТНО и только сейчас попадаем в задачу 24
В следующей статье рассмотрим другой случай использования этих двух флагов.
Комментариев нет:
Отправить комментарий