Вы можете увидеть разницу между этими двумя контекстами, когда вы запускаете свое приложение непосредственно с главного экрана по сравнению с тем, когда ваше приложение запускается из другого приложения через намерение общего доступа.
Вот практический пример того, что означает «нестандартное поведение обратного стека», упомянутое @CommonSenseCode:
Предположим, что у вас есть два приложения, которые взаимодействуют друг с другом, App1 и App2 .
Запустите App2: MainActivity из панели запуска. Затем из MainActivity запустите App2: SecondaryActivity . Там, используя либо контекст действия, либо контекст приложения, обе операции живут в одной задаче, и это нормально (учитывая, что вы используете все стандартные режимы запуска и флаги намерений). Вы можете вернуться к MainActivity с помощью повторного нажатия, и в последних приложениях у вас есть только одна задача.
Предположим теперь, что вы находитесь в App1 и запускаете App2: MainActivity с намерением общего ресурса (ACTION_SEND или ACTION_SEND_MULTIPLE). Затем оттуда попробуйте запустить App2: SecondaryActivity (всегда со всеми стандартными режимами запуска и флагами намерений). Что происходит, это:
если вы запустите App2: SecondaryActivity с контекстом приложения на Android <10, вы не сможете запустить все действия в одной задаче . Я пробовал с Android 7 и 8 и SecondaryActivity всегда запускается в новой задаче (я думаю, это потому, что App2: SecondaryActivity запускается с контекстом приложения App2, но вы выходите из App1, и вы не запускали приложение App2 напрямую Может быть, под капотом андроид распознает это и использует FLAG_ACTIVITY_NEW_TASK). Это может быть хорошо или плохо в зависимости от ваших потребностей, для моего приложения было плохо.
В Android 10 происходит сбой приложения с сообщением
«Для вызова startActivity () вне контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вам нужно?» ,
Поэтому, чтобы он работал на Android 10, вы должны использовать FALG_ACTIVITY_NEW_TASK, и вы не можете запустить все действия в одной задаче.
Как вы можете видеть, поведение отличается между версиями Android, странно.
если вы запускаете App2: SecondaryActivity с контекстом активности, все идет хорошо, и вы можете запустить все действия в одной задаче, что приведет к линейной навигации в обратном стеке.
Я надеюсь, что я добавил полезную информацию