アプリをホーム画面から直接起動した場合と、共有インテントを介して別のアプリから起動した場合の 2 つのコンテキストの違いを確認できます。
@CommonSenseCode で言及されている「非標準のバックスタック動作」の実際の例を以下に示します。
互いに通信する 2 つのアプリApp1とApp2があるとします。
ランチャーからApp2:MainActivityを起動します。次に MainActivity からApp2:SecondaryActivityを起動します。そこでは、アクティビティ コンテキストまたはアプリケーション コンテキストのいずれかを使用して、両方のアクティビティが同じタスク内にあり、これで問題ありません (標準の起動モードとインテント フラグをすべて使用する場合)。バック プレスで MainActivity に戻ることができ、最近のアプリではタスクが 1 つしかありません。
App1にいて、共有インテント (ACTION_SEND または ACTION_SEND_MULTIPLE) でApp2:MainActivityを起動するとします。次に、そこからApp2:SecondaryActivityの起動を試みます(常にすべての標準起動モードとインテント フラグを使用します)。何が起こるか:
Android < 10 でアプリケーション コンテキストを使用して App2:SecondaryActivity を起動すると、同じタスクですべてのアクティビティを起動することはできません。Android 7 および 8 で試してみましたが、SecondaryActivity は常に新しいタスクで起動されます (App2:SecondaryActivity が App2 アプリケーション コンテキストで起動されるためだと思いますが、App1 から来ており、App2 アプリケーションを直接起動しなかったためです)。たぶん内部で Android がそれを認識し、FLAG_ACTIVITY_NEW_TASK を使用します)。私のアプリケーションが悪かったため、これはニーズに応じて良い場合も悪い場合もあります。
Android 10 でアプリがクラッシュし、 「Activity コンテキストの外部から startActivity() を呼び出すには FLAG_ACTIVITY_NEW_TASK フラグが必要です。これは本当に必要ですか?」というメッセージが表示されます。.
したがって、Android 10 で動作させるには、FALG_ACTIVITY_NEW_TASK を使用する必要があり、同じタスクですべてのアクティビティを実行することはできません。
ご覧のとおり、Android のバージョンによって動作が異なります。
アクティビティ コンテキストを使用して App2:SecondaryActivity を起動すると、すべてがうまくいき、同じタスクですべてのアクティビティを実行できるため、バックスタック ナビゲーションが線形になります。
有益な情報を追加できたと思います