Task — это стэк Activity
-объектов, в котором пользователь выполняет задачу.
Он отображается как одно приложение в списке недавних (Overview / Recents).
Task = back stack
- Первый
Activity
в таске — это root Activity - Пользователь нажимает «назад» →
Activity
удаляются из таска - Когда все
Activity
удалены → таск уничтожается
Как Activity
попадает в таск?
Через комбинацию:
launchMode
(standard
,singleTop
,singleTask
,singleInstance
)intent
flags (FLAG_ACTIVITY_NEW_TASK
,CLEAR_TOP
, и т.д.)taskAffinity
— контроль, к какому таску принадлежитActivity
launchMode
это способы запуска Activity
Указывается в манифесте или через Intent-флаги.
launchMode | Поведение |
---|---|
standard | Каждое открытие → новая копия Activity (дефолт) |
singleTop | Если Activity уже на вершине стека → переиспользуется (onNewIntent ) |
singleTask | Если Activity есть в стеке таска → таск всплывает, onNewIntent() |
singleInstance | Как singleTask , но Activity живёт в отдельном таске |
taskAffinity
это к какому таску принадлежит Activity
По умолчанию — все Activity
одного приложения имеют одинаковый taskAffinity
<activity android:name=".LoginActivity"
android:taskAffinity="com.example.login"
android:launchMode="singleTask"
android:exported="false" />
Теперь LoginActivity
будет запускаться в своём отдельном таске.
Полезные intent-флаги
Флаг | Поведение |
---|---|
FLAG_ACTIVITY_NEW_TASK | Запуск в новом таске (если taskAffinity отличается) |
FLAG_ACTIVITY_CLEAR_TOP | Удаляет все Activity выше заданной |
FLAG_ACTIVITY_SINGLE_TOP | Как launchMode="singleTop" |
FLAG_ACTIVITY_NO_HISTORY | Activity не сохраняется в back stack |