Task — это стэк Activity-объектов, в котором пользователь выполняет задачу.
Он отображается как одно приложение в списке недавних (Overview / Recents).
Task = back stack
- Первый
Activityв таске — это root Activity - Пользователь нажимает «назад» →
Activityудаляются из таска - Когда все
Activityудалены → таск уничтожается
Как Activity попадает в таск?
Через комбинацию:
launchMode(standard,singleTop,singleTask,singleInstance)intentflags (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 |