1

これが私のシナリオです。アプリは、メインの起動ポイントであるアクティビティ A から始まります。B & C など、A から開始されるさまざまなアクティビティが他にもあります。A から B への移動は元に戻すことができる (実際に戻るには押し戻す) 必要があるため、A => C と同じようにアクティビティ スタックに A が必要です。すべてがデフォルトで問題なく動作します。

ここからがややこしいところです: バックグラウンド プロセス (ブロードキャスト レシーバー) から起動できる X などの別のアクティビティがあります。X が起動すると、現在画面に表示されているものはすべて置き換えられるはずです。その部分は問題ありません。その後、ユーザーは X を閉じることができます (finish() と startActivity(A) で終了するため、スタックに X はありません)。また、バックグラウンド プロセス (放送受信機が別のインテントを受け取る) によって終了することもできます。後者の場合に問題があります。

私はまだ X で finish() を呼び出していますが、次のことが起こります: 以前にアクティブだったアクティビティ (A など) が再び表示されます。X が起動する前に A が表示された場合は問題ありませんが、アプリがバックグラウンドにあった場合、X が閉じられると、X を起動する前の状態が復元されます (したがって、ホーム画面を表示するか、X が起動する前に実行されていたアプリを表示します)。発売)。あなたが疑問に思っているなら.. なぜ私はユーザーに割り込んでいるのですか? それには正当な理由があります (これはテレフォニー アプリであり、着信は中断されるはずです)。

Xでdismissを呼び出すと、アプリはアクティビティスタックにある他のものに戻るようです。X が起動されたときにアプリがフォアグラウンドにあった場合は問題ありませんが、そうでない場合は、X を閉じて、アクティブだったアプリが再び最上位になるようにします。

X を起動するときに使用しているインテント フラグは次のとおりです。

私はすでに FLAG_ACTIVITY_MULTIPLE_TASK を試しましたが、結果は満足のいくものではありませんでした (アプリがバックグラウンドで実行されていた場合、これにより、ユーザーの介入なしに X が閉じられたときにアプリが一番上に表示されなくなりますが、アプリの履歴には X が表示されます) X は決してそこに表示されるべきではありません。さらに、ユーザーが実際にそれを選択すると、確かに X が起動しますが、これは悪いことです。

簡単に言えば

電話がステータス S1 にある X が起動された X は、finish() を呼び出すことによってユーザーの操作なしで閉じられます 電話はステータス S1 に戻る必要があります

これは何とか達成できますか?

4

1 に答える 1

0

フラグを使用してみてくださいFLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

設定されている場合、新しいアクティビティは最近開始されたアクティビティのリストに保持されません。

于 2013-01-26T11:23:08.923 に答える