На удобство использования также влияет навигация между экранами и приложениями. Принципы ниже – это основа для создания единообразного и интуитивно понятного интерфейса в разных приложениях. Компонент Navigation по умолчанию реализует эти принципы, чтобы пользователи могли применять одни и те же эвристики и шаблоны навигации при переходе между приложениями.
Фиксированный пункт отправления
У каждого созданного вами приложения есть фиксированный начальный пункт назначения. Это первый экран, который пользователь видит при запуске приложения. Это также последний экран, который пользователь видит, когда возвращается в панель запуска после нажатия кнопки "Назад". Давайте рассмотрим пример с приложением Sunflower.

Рисунок 1. Экран со списком – это начальный экран приложения Sunflower.
При запуске приложения Sunflower из панели запуска первый экран, который видит пользователь, – это экран со списком растений в его саду. Это также последний экран, который они видят перед выходом из приложения. Если они нажмут кнопку «Назад» на экране списка, они вернутся к панели запуска.
Состояние навигации представлено в виде стека пунктов назначения.
При первом запуске приложения для пользователя создается новая задача и приложение показывает начальный пункт назначения. Он становится базовым пунктом назначения так называемого обратного стека и основой для состояния навигации вашего приложения. Верхняя часть стека – это текущий экран, а предыдущие пункты назначения в стеке представляют собой историю того, где вы были. Внизу обратного стека всегда находится начальный пункт назначения приложения.
Операции, изменяющие обратный стек, всегда выполняются в верхней части стека, либо путем помещения нового пункта назначения в верхнюю часть стека, либо путем извлечения самого верхнего пункта назначения из стека. При переходе к пункту назначения он помещается в верхнюю часть стека.
Компонент навигации управляет порядком обратного стека, но вы можете делать это и самостоятельно.
Кнопки "Вверх" и "Назад" выполняют одинаковые действия в рамках задачи приложения.

Рисунок 2. Кнопки "Вверх" и "Назад"
Кнопка "Назад" находится на панели навигации внизу экрана. Она позволяет перемещаться по экранам, с которыми пользователь работал недавно, в обратном хронологическом порядке. При нажатии кнопки "Назад" текущий пункт назначения извлекается из верхней части обратного стека, и вы переходите к предыдущему пункту назначения.
Кнопка "Вверх" находится на панели приложения в верхней части экрана. В рамках задачи приложения кнопки "Вверх" и "Назад" работают одинаково.
Кнопка "Вверх" никогда не закрывает приложение.
Если пользователь находится на начальном экране приложения, кнопка "Вверх" не отображается, поскольку она не позволяет выйти из приложения. Однако кнопка "Назад" отображается и позволяет выйти из приложения.
Если ваше приложение запущено с помощью ссылки на контент в задаче другого приложения, кнопка "Вверх" возвращает пользователя к задаче вашего приложения и проводит его через имитированный обратный стек, а не к приложению, которое активировало ссылку на контент. Однако кнопка "Назад" возвращает вас в другое приложение.
Ссылки на контент имитируют навигацию вручную
Независимо от того, как вы перешли к определенному пункту назначения – по ссылке на контент или вручную, – вы можете использовать кнопку "Вверх", чтобы вернуться к начальному пункту назначения.
При переходе по ссылке на контент в приложении существующий обратный стек удаляется и заменяется новым.
Вернемся к примеру с приложением Sunflower. Предположим, что пользователь ранее запустил приложение с главного экрана и перешел на экран с подробной информацией о яблоке. На экране "Недавние" будет показано, что существует задача, в которой верхним экраном является экран с подробными сведениями о яблоке.

Рисунок 3. Навигация пользователя по приложению Sunflower и результирующий обратный стек.
В этот момент пользователь может нажать кнопку главного экрана, чтобы перевести приложение в фоновый режим. Допустим, в приложении есть функция ссылки на контент, которая позволяет пользователям сразу переходить к экрану с подробной информацией о конкретном растении по его названию. При открытии приложения по этой ссылке на контент текущий обратный стек Sunflower, показанный на рисунке 3, полностью заменяется новым обратным стеком, как показано на рисунке 4:

Рисунок 4. Переход по ссылке на контент заменяет существующий обратный стек для приложения Sunflower.
Обратите внимание, что обратный стек Sunflower заменяется синтетическим обратным стеком с экраном сведений об авокадо вверху. Экран My Garden, который является начальным пунктом назначения, также был добавлен в обратный стек. Исходный обратный стек Sunflower удален, и приложение больше не знает, что пользователь был на экране сведений о яблоке. Все это важно, потому что синтетический обратный стек должен быть реалистичным. Он должен соответствовать обратному стеку, который мог быть получен при органической навигации по приложению.
Чтобы решить эту проблему, создается упрощенный синтетический обратный стек на основе NavGraph. Для простого графа NavGraph без вложенных элементов он будет состоять из начального пункта назначения и пункта назначения ссылки на контент. Для более сложных вложенных графов навигации синтетический обратный стек также будет содержать начальные пункты назначения любых вложенных графов, которые являются предками пункта назначения ссылки на контент.
Компонент Navigation поддерживает ссылки на контент и воссоздает реалистичный обратный стек при переходе к любому пункту назначения в графе навигации.