Ви можете побачити різницю між цими двома контекстами, коли ви запускаєте додаток безпосередньо з головного екрана порівняно з тим, коли ваш додаток запускається з іншого додатка через наміри спільного використання.
Ось практичний приклад того, що означає "нестандартна поведінка заднього стека", яку згадує @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 () поза контекстом діяльності вимагає прапор FLAG_ACTIVITY_NEW_TASK. Це дійсно те, що ви хочете?" .
Тому для роботи на Android 10 вам потрібно використовувати FALG_ACTIVITY_NEW_TASK, і ви не можете виконувати всі дії в одному завданні.
Як ви бачите, поведінка відрізняється між версіями Android, дивно.
якщо запустити App2: SecondaryActivity з контекстом діяльності, все піде добре, і ви можете запустити всі дії в одній задачі, що призводить до лінійної навігації за заднім числом.
Я сподіваюся, що я додав корисну інформацію