fbpx

Blog

Типы Android launchMode визуально

Android launchMode являются важным инструментом и каждый разработчик должен иметь представление какие бывают типы и для чего они используются. Многие разработчики используют только один – самый распространенный тип singleTask – он исключает дублирование ваших activity (экранов). Однако существуют еще несколько типов, которые могут вам пригодится, например, при обработке deeplinks. Давайте рассмотрим другие типы на примерах. В этой статье довольно подробно описана работа launchMode. В данной статье упор сделан на визуализацию поведения стека activity при выборе того или иного launchMode.

Для объяснения будут использоваться следующие обозначения:

Зелёный прямоугольник – только что созданная Activity. Жёлтый – уже имеющийся в стеке instance Activity, но у которого вызывается метод onNewIntent() 

1 — launchMode = “singleTop” in Activity D

1. Если Activity D была определена с флагом singleTop в AndroidManifest.xml. То Activity D не будет создана, а будет использоваться тот же instance (экземпляр) и будте вызван метод onNewIntent() у Activity D.
2.Если Activity D определена с launchMode типа singleTop в AndroidManifest.xml то если такой Activity не было в стеке – то новая Activity D будет создана.
3.  Activity D использует существующий instance (экземпляр) с вызовом метода onNewIntent() только в том случае если она уже на вершине стека. Если Activity D находится не на вершине стека – то новый instance Activity D будет создан

2 — launchMode = “singleTask” in Activity C

Activity D уничтожена из стека и onNewIntent() метод был вызван у Activity C.
Activity C создана и добавлена в стек

3 — launchMode = “singleInstance” in Activity E

Activity A,B,C,D находятся в одном Task. E будет создана в другом Task.

Activity E создана в новом Task. Что если мы хотим запустить Activity F из Activity D ? Результат такой:

E все еще находится в другом Task. a,b,c,d и f находятся в другом Task
Activity E находится в другом Task. И если мы стартуем Activity E еще раз, то метод onNewIntent() будет вызван вместо создания новой activity.

4 — launchMode = “standard” in Activity B

Создается новая activity B несмотря на то, что она уже находится в стеке.

Надеюсь, теперь стало ясно как ведет себя Activity при старте, используя тот или иной тип launchMode.

Оригинал статьи