Что происходит при запуске приложения, если в манифесте объявлены две активности с launchMode launch
Что проверяют
Знаете ли вы значения launchMode и понимаете ли, что режим это свойство отдельной Activity, а не приложения. Формулировка вопроса нарочно кривая: режима с именем launch не существует, и первым делом ждут уточняющего вопроса.
Как отвечать
Начните с уточнения: имеются в виду два экрана с одинаковым режимом в манифесте или два intent-filter с категорией LAUNCHER. Второе даёт две иконки в лаунчере и две точки входа, первое совершенно законно и ничему не мешает.
Дальше разберите сами режимы:
standard: новый экземпляр на каждый запуск, их может быть несколько в одной задаче;singleTop: если экземпляр уже наверху нужной задачи, новый не создаётся, вместо этого приходитonNewIntent();singleTask: экземпляр один, задача выносится вперёд, всё, что лежало над ним, уничтожается, и снова приходитonNewIntent();singleInstance: экземпляр один и живёт в своей задаче в одиночку.
Две Activity с singleTask и одинаковой taskAffinity окажутся в одной задаче, вторая ляжет поверх первой. Чтобы получить отдельные задачи, аффинити придётся развести явно. Полезно добавить, что манифест решает не всё: флаги Intent на месте вызова (FLAG_ACTIVITY_NEW_TASK, CLEAR_TOP, CLEAR_TASK) комбинируются с режимом, а система вправе убить процесс и восстановить стек задач по своим правилам.
Где спотыкаются
Отвечают «будет конфликт, приложение не запустится». Оно соберётся и запустится: какая Activity стартует из лаунчера, определяет intent-filter, а не режим запуска.
Второе: забывают setIntent() внутри onNewIntent(). Экран переиспользуется, а getIntent() продолжает отдавать данные первого запуска, из-за чего диплинк открывается через раз.
Третье: ставят singleTask стартовому экрану, чтобы не плодить дубли. Побочный эффект в том, что возврат из шаринга или из уведомления вычищает стек над этим экраном, и пользователь вместо своей формы видит главную.