これがばかげて些細なことに聞こえる場合は申し訳ありませんが、私は長い間それに固執しています.
5 つのアクティビティ A、B、C、D、E があります。A→B(Cに移動して終了)→C→D→Eのように連鎖します。C,D は相互に依存しているため、両方を一緒に終了するまで、C,D のインスタンスを失いたくありません。そして、これを E で実行したいということは、 E から C,D,E を終了して A に移動するか、すべてのアクティビティを終了してから A の新しいインスタンスを開きたいということです。誰かがこの種の問題に対する簡単な解決策をすでに持っている場合は、解決策を提供してください。私は多くのことを試しましたが、CのlaunchModeを「singleTask」に設定し、DのlaunchModeを「singleInstance」に設定し、戻るボタンを押したときにCに移動する意図を使用して、完了せずに前後に移動できるようにしました。新しいインスタンスが作成されるかどうかは E にとって重要ではないため、「標準」のままにします。次に、意図を使用して A を開き、フラグ「FLAG_ACTIVITY_CLEAR_TOP」を追加し、「singleInstance」アクティビティであるため、startActivityFor 結果を使用して D を閉じようとしました。
問題の1つは、作成されている構造を理解できないことですが、このようなものだと思います
Task 1 -- [A->C] (Since B is finished when C is opened)
Task 2 -- [D] (since singleInstance)
Task 3 -- [E]
ここで、E から A の新しいインスタンスに移動し、他のすべてを閉じる必要があります。すべてのアクティビティは同じアフィニティを持っているので、finishAffinity() を使用してみましたが、うまくいきませんでした。
もう 1 つの問題は、結果を E に設定したときに D の onActivityResult メソッドが呼び出されないことです (stackoverflow の回答の 1 つによると、D が singleInstance であるためだと思います) が、戻るボタンを押すと A から呼び出されますA または A から finish() が呼び出されたときに言うことができます (なぜこれが起こるのかわかりません)。そのため、戻るボタンを押すと、さまざまな種類の問題が発生します。