Я пытаюсь понять задачи Android и стек Back, читая официальную документацию: https://developer.android.com/guide/components/activities/tasks-and-back-stack
У меня есть пара вопросов относительно документации.
Вопрос 1 : на рисунке 4 в документации есть 2 задачи - передняя и фоновая, фоновые задачи содержат действие Y и X, если объявлено действие Yв режиме запуска singleTask
как можно создать задачу с действием Y поверх действия X?
Для других вопросов я подготовил простой проект - 2 действия, A и B. На обоих занятиях у меня есть 2 кнопки:
- Кнопка A открывает действие A
- Кнопка B открывает задание B
Упражнение A - это ОСНОВНОЕ (ЗАПУСК) действие.
Вопрос 2 : в документации сказано, что использование флага намерения FLAG_ACTIVITY_NEW_TASK
приводит к тому же поведению, что и режим запуска singleTask
:
Это приводит кповедение, аналогичное значению launchMode "singleTask", обсуждавшемуся в предыдущем разделе.
Это не то, что я вижу в своем тестовом приложении.Если у действия B установлен режим запуска на singleTask
, и если мой backstack - A -> B -> A -> A, то, если я открою B, задний стек будет выглядеть как A -> B (он вытолкнет последний2 как).Я предполагаю, что причина этого в созданных задачах: когда была отправлена цель запуска, она открыла действие A в новой задаче (давайте назовем ее задачей 1), когда я открыла B, она открыла ее в задаче 2 (потому что онаимеет режим запуска singleTask
), затем действия 2 A также были открыты в Задаче 2.После повторного открытия B Android обнаружил задачу, которая уже имеет действие B (Задача 2), и вывел ее на передний план, выдав 2 As.
Однако использование FLAG_ACTIVITY_NEW_TASK
вместо singleTask
не приводит к такому же поведению, оно просто открывает B поверх всего остального.Документация неправильная или я что-то не так делаю?
Вопрос 3: Пример в конце говорит:
два режима запуска, которые помечают действия как всегда инициирующие задачу, «singleTask» и «singleInstance", следует использовать только в том случае, если у действия есть фильтр ACTION_MAIN и фильтр CATEGORY_LAUNCHER.Представьте, например, что может произойти, если отсутствует фильтр: намерение запускает действие «singleTask», инициируя новую задачу, и пользователь тратит некоторое время на выполнение этой задачи.Затем пользователь нажимает кнопку «Домой».Задача теперь отправляется в фоновый режим и не отображается.Теперь у пользователя нет возможности вернуться к задаче, потому что она не представлена в панели запуска приложений.
Как воспроизвести это?В моем предыдущем примере я открываю упражнение B в новом задании, но если я снова нажму кнопку «Домой» и значок средства запуска, я вернусь к заданию B. Поэтому, хотя я использую режим запуска singleTask
, яЯ все еще могу вернуться к этой задаче, используя значок запуска или выбрав его из списка последних приложений.
Вполне возможно, что я делаю что-то не так и что новые задачи не генерируются, есть ли способ просмотреть все задачи и действия для конкретного приложения?
Спасибо.