Режимы запуска активности Android

Добро пожаловать в одну из самых важных тем разработки приложений для Android. В этой статье мы рассмотрим подробное объяснение режимов запуска с примерами.

Важные термины

Прежде чем перейти к режимам запуска, приведем несколько важных терминов.

Задача

Задача — это набор действий. У приложения может быть одна или несколько задач. При запуске приложения создается новая задача, а активность запуска становится корнем задачи. Создание новой задачи зависит от режимов запуска, которые мы рассмотрим далее в этой статье.

Обратный стек

Хранение активностей в структуре данных стека называется обратным стеком. Действия могут быть помещены в стек и извлечены из него на основе действий пользователя и режимов запуска.

Режимы запуска

Существует четыре типа режимов запуска:

  1. Стандартный
  2. одиночная вершина
  3. Одиночная задача
  4. Единичный экземпляр

Давайте разберемся в каждом из них.

1. Стандартный

Когда вы не указываете никакого режима запуска, по умолчанию используется стандартный. Он создает новый экземпляр активности каждый раз, когда вы ее запускаете. Предположим, что A, B, C, D и т.д. — это виды деятельности. Это работает следующим образом:

Задача с активностями:

A -> B -> C -> D
Войти в полноэкранный режим Выйти из полноэкранного режима

Начать новую деятельность E:

A -> B -> C -> D -> E
Войти в полноэкранный режим Выйти из полноэкранного режима

Снова начните деятельность B:

A -> B -> C -> D -> E -> B
Войти в полноэкранный режим Выйти из полноэкранного режима

2. Одиночная вершина

В этом режиме запуска, если активность находится на вершине задачи и вы снова создаете ее экземпляр, то новый экземпляр не будет создан. Вместо этого будет вызван onNewIntent() с обновленными данными. Если активность не находится на вершине, то будет создан новый экземпляр. См. примеры:

Задача с активностями:

A -> B -> C -> D
Вход в полноэкранный режим Выход из полноэкранного режима

Запустите активность B. Поскольку B не находится на вершине, будет создан новый экземпляр:

A -> B -> C -> D -> B
Войти в полноэкранный режим Выйти из полноэкранного режима

Снова запустите активность B. Поскольку B находится сверху, будет вызван onNewIntent() на B:

A -> B -> C -> D -> B
Войти в полноэкранный режим Выйти из полноэкранного режима

3. Одиночная задача

В этом режиме запуска, если активность не существует в задаче, создается новый экземпляр, иначе вызывается onNewIntent(). Кроме того, активности над ним уничтожаются. Давайте разберемся в этом на примерах:

Задача с активностями:

A -> B -> C -> D
Вход в полноэкранный режим Выход из полноэкранного режима

Запуск активности E с режимом запуска одиночной задачи:

A -> B -> C -> D -> E
Войти в полноэкранный режим Выход из полноэкранного режима

Начните деятельность B с одиночной задачей в режиме запуска:

A -> B
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь вы видите, что B уже существует. Поэтому новый экземпляр не создается. Вызывается onNewIntent() из B. Кроме того, C, D и E, которые находятся над B, были уничтожены.

4. Единственный экземпляр

Для активности, имеющей режим запуска single instance, создается новая задача. Сначала посмотрите пример, а затем мы сможем его объяснить.

Задача с действиями:

A -> B -> C -> D
Войти в полноэкранный режим Выйти из полноэкранного режима

Запуск E с режимом запуска в одном экземпляре:

Task-1: A -> B -> C -> D
Войти в полноэкранный режим Выход из полноэкранного режима
Task-2: E
Войти в полноэкранный режим Выход из полноэкранного режима

Если вы снова запустите E, он не создаст новую задачу. В том же экземпляре E будет вызван метод onNewIntent().

Как добавить режимы запуска

Режим запуска можно установить из AndroidManifest.xml следующим образом:

<activity android:name=”.MainActivity”
          android:launchMode=”singleTop” />

Войти в полноэкранный режим Выйти из полноэкранного режима

или в коде Java/Kotlin с помощью флагов, как показано ниже:

val intent = Intent(activity, HomeGenericActivity::class.java).apply { 
            addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
        }
Ввести полноэкранный режим Выйти из полноэкранного режима

Видите, это очень просто!!! 😁😁😁 Надеюсь, вам понравилось читать эту статью.

Оцените статью
devanswers.ru
Добавить комментарий