ホーム画面から直接アプリを起動した場合と、共有インテントを介して別のアプリから起動した場合の2つのコンテキストの違いを確認できます。
ここで、@ CommonSenseCodeによって言及された「非標準のバックスタックの動作」の意味の実際的な例は、次のとおりです。
互いに通信する2つのアプリApp1とApp2があるとします。
起動App2の:MainActivityランチャーから。そして、MainActivity打ち上げからApp2の:SecondaryActivity。そこでは、アクティビティコンテキストまたはアプリケーションコンテキストを使用して、両方のアクティビティが同じタスクに住んでいますが、これは問題ありません(すべての標準の起動モードとインテントフラグを使用する場合)。バックプレスでMainActivityに戻ることができ、最近のアプリではタスクが1つだけです。
今あなたがいると仮定します のApp1と打ち上げMainActivity:App2の意思シェア(ACTION_SENDまたはACTION_SEND_MULTIPLE)と。次に、そこからApp2:SecondaryActivityを起動してみます(常にすべての標準の起動モードとインテントフラグを使用)。何が起こるか:
Android <10でアプリケーションコンテキストを使用してApp2:SecondaryActivityを起動すると、起動できませんすると、同じタスクですべてのアクティビティを。私はアンドロイド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をアクティビティコンテキストで起動すると、すべてがうまくいき、すべてのアクティビティを同じタスクで実行できるため、線形のバックスタックナビゲーションが実現します。
役立つ情報を追加したかと思います