Task или виды Activity launch mode
У каждого приложения может быть несколько стеков из Activity. Под каждый стек создается новая Task
Activity launch mode — описывает сценарий изменения стека при запуске новой Activity
Например, можно открывать каждую Activity в отдельном стеке. Тогда в списке запущенных приложений (Recent screen) вы увидите, что ваше приложение открыто в нескольких окнах, каждое из которых можно закрыть отдельно
Выбрать, что произойдет после запуска новой Activity, можно с помощью тега launchMode у <activity> в Manifest. И при помощи установка флага в Intent. А еще при помощи параметра taskAffinity, allowTaskReparenting, clearTaskOnLaunch, alwaysRetainTaskState, finishOnTaskLaunch....
Все гениальное просто, да?
Но разберем основные варианты, которые покрывают 99,99% случаев:
• standart
создастся новая Activity в текущей таске. даже если ее экземпляры есть в текущей таске или в другой
• singleTop
если в текущей таске Activity находится на вершине, то новый ее инстанс создан не будет. текущий инстанс получит Intent через onNewIntent()
в противном случае создастся новый экземпляр в текущей таске
• singleTask
если уже есть таска, в которой вызываемая Activity находится в корне стека, то откроется экземпляр этой Activity, ей будет передан Intent через onNewIntent(), а все остальные Activity в этой таске будут задестроены
в противном случае создается новая таска с новым Activity
• singleInstance
аналогично singleTask. отличие - в таске, в которой находится Activity с таким флагом, может находиться только эта Activity. Под остальные Activity, запущенные из этой Activity, будут создаваться новые таски
• singleInstancePerTask
аналогично singleTask. отличие - если добавить флаг FLAG ACTIVITY MULTIPLE TASK, запуск новой Activity может вызвать создание новой таски, даже если уже есть таска с инстансом этой Activity в корне стека
• standart + FLAG ACTIVITY CLEAR TOP
если в текущей таске есть запускаемая Activity, то она получит Intent через onNewIntent(), а все Activity, запущенные после нее, будут задестроены
в противном случае будет создан новый экземпляр Activity в текущей таске
....
1. есть Activity, есть Task. а зачем тогда вводится и за что отвечает абстракция Window?
2. все вышеописанное справедливо для приложения с множеством Activity. а возможно ли добиться создания нескольких Task в single activity приложении на Fragments/Compose?
Post #67
2.28K