В этот раз рассмотрим флаг FLAG_ACTIVITY_MULTIPLE_TASK. Этот флаг всегда используется совместно с флагом FLAG_ACTIVITY_NEW_TASK или флагом FLAG_ACTIVITY_NEW_DOCUMENT (API Level 21).
Если флаг FLAG_ACTIVITY_MULTIPLE_TASK используется совместно с флагом FLAG_ACTIVITY_NEW_TASK , то Активность ВСЕГДА будет запускаться в новой задаче, не смотря на то что экземпляр данной Активности может уже существовать в какой либо задаче. Данную сладкую парочку надо использовать очень осторожно, так как система не предоставляет ни каких инструментов для возврата в созданную таким образом задачу. То есть вы должны сами позаботиться, чтобы пользователь мог переключиться на созданную таким образом задачу.
Приложения АР0003 и АР0004 опять пережили очередную мутацию. В приложении АР0003 в Активности С добавлена кнопка запуска Активности D из приложения АР0004 с двумя данными ключами (FLAG_ACTIVITY_MULTIPLE_TASK и FLAG_ACTIVITY_NEW_TASK).
В приложении АР0004 в Активности С была добавлена такая же кнопка.
Прежде чем начать описание работы этих ключей хочу напомнить, что запуск Активности с ключом FLAG_ACTIVITY_NEW_TASK принадлежащей тому же приложению, что и запускающая ее Активность не приводит к созданию новой задачи.
И так запускаем АР0004
Стартуем Активность В
И затем стартуем Активность С
Теперь нажем Start D NewTask. Данная кнопка запускает активность D с флагом FLAG_ACTIVITY_NEW_TASK. Обращаем внимание что номер текущей задачи 128.
Активность D была запущена в той же задаче 128. Это пример для напоминания пройденного и для того чтобы понять разницу со следующим примером. Жмем кнопку обратно.
Мы снова в Активности С, которая сообщает нам что она уже была запущена. Теперь жмем кнопку Start D MULTIPLE_TASK.
Как видим Активность D была запущена в новой задаче 129. Теперь у нас есть две задачи 128 в которой ТРИ Активности А-В-С. И 129 в которой ОДНА Активность D. Нажмем Info чтобы в этом убедиться.
Введем любой текст в нашей Активности D.
Нажмем кнопку ДОМОЙ и затем снова запустим приложение АР0004.
Что самое интересное мы снова попали в задачу 129, а не в задачу 128. То есть кнопка ДОМОЙ не нарушила последовательности этих двух задач.
Теперь снова жмем ДОМОЙ и запускаем приложение АР0003
Запускаем Активность В
И далее Активность С
Запоминаем что у нас это задача 131 и жмем кнопку Start Activity D AP0004 MULTIPLE_TASK.
Так же видим, что это новый экземпляр Активности D и он запущен в новой задаче 131.
И так у нас сейчас есть четыре задачи 128, 129, 130 и 131. Задачи 128 и 130 содержат по ТРИ Активности А-В-С и принадлежат соответственно приложениям АР0004 и АР0003. Задачи 129 и 131 содержат по ОДНОЙ Активности D.
Введем любой текст в нашу новую Активность D и нажмем Info
Теперь жмем кнопку ДОМОЙ и снова запускаем приложение АР0003
В данном случае мы уже не попали в Активность D задачи 131! И это надо учитывать! Это как раз тот случай когда возможности вернуться в запущенную задачу может и не быть!
Нажмем еще раз кнопку Start Activity D AP0004 MULTIPLE_TASK и сразу же введем любой текст в поле Активности D
Мы видим что был создан еще один новый экземпляр Активности D в задаче 132.
Теперь у нас ПЯТЬ задач.
Жмем кнопку ДОМОЙ и запускаем приложение АР0004
Ииии опаньки мы попали в задачу 132. Напомню что этот экземпляр Активности D мы стартовали вторым из приложения АР0003. Очень интересное поведение. Получается что задачи с Активностями D из приложения АР0004 выстроились в своеобразный стек задач.
Жмем кнопку ОБРАТНО
Ииии попадаем в ДОМАШНИЙ ЭКРАН
Запускаем еще раз АР0004
Иии
Попадаем в задачу 131. Это первый экземпляр Активности D запущенный из приложения АР0003.
Опять жмем ОБРАТНО
И снова домашний экран
Опять запускаем АР0004
И попадаем в Активность D задачи 129. Это тот экземпляр Активности D который мы запустили из приложения АР0004.
Жмем кнопку ОБРАТНО
Снова домашний экран
Еще раз запускаем приложение АР0004
И только сейчас мы попали в Активность С приложения АР0004.
Вот такое интересное поведение у Активностей и стека задач при использовании этой сладкой парочки ключей.
Стоит так же добавить что если из Активности D запустить другие Активности, то при запуске приложения АР0004 будет происходить переключение на верхнюю Активность последней активной задачи. То есть переключение на стек последней задачи для которой Активность D является корневой.
Ну и последний пример. Для этого выйдем полностью из задачи 128 и запустим приложение АР003 (из его задачи 130 мы не выходили).
И снова нажмем Start Activity D AP0004 MULTIPLE_TASK и введем любой текст.
Видим новый экземпляр Активности D в новой задаче 138.
Жмем кнопку ДОМОЙ и запускаем приложение АР0004
И видим наш экземпляр Активности D задачи 138. То есть приложение АР0004 было запущено не с Активности А, а с уже существующей Активности D.
На этом с этими ключиками все.
Комментариев нет:
Отправить комментарий