これはあなたが望む動作だと思います:
singleTask は、ホームプレスのスタックを、私には理解できない遅れた理由でリセットします。解決策は、singleTask を使用せず、代わりにランチャー アクティビティにstandardまたはsingleTopを使用することです (ただし、これまでに singleTop でのみ試しました)。
アプリは相互に親和性があるため、次のようなアクティビティを起動します。
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if(launchIntent!=null) {
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
}
古いアクティビティで新しいアクティビティを開始することなく、アクティビティスタックが元のように再表示されます(これは以前の私の主な問題でした)。フラグは重要なものです:
FLAG_ACTIVITY_NEW_TASK API レベル 1 で追加
設定されている場合、このアクティビティは、この履歴スタックの新しいタスクの開始になります。タスク (それを開始したアクティビティから次のタスク アクティビティまで) は、ユーザーが移動できるアクティビティのアトミック グループを定義します。タスクはフォアグラウンドとバックグラウンドに移動できます。特定のタスク内のすべてのアクティビティは、常に同じ順序のままです。タスクの詳細については、タスクとバック スタックを参照してください。
このフラグは通常、「ランチャー」スタイルの動作を提示したいアクティビティで使用されます。これらのアクティビティは、実行できる個別のリストをユーザーに提供します。それ以外の場合は、それらを起動するアクティビティとは完全に独立して実行されます。
このフラグを使用する場合、開始しようとしているアクティビティに対してタスクが既に実行されている場合、新しいアクティビティは開始されません。代わりに、現在のタスクが前回の状態で画面の前面に表示されます。この動作を無効にするフラグについては、FLAG_ACTIVITY_MULTIPLE_TASK を参照してください。
このフラグは、呼び出し元が起動中のアクティビティからの結果を要求している場合は使用できません。
と:
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED API レベル 1 で追加
設定されていて、このアクティビティが新しいタスクで開始されているか、既存のタスクを最上位に持ってきている場合、タスクのフロント ドアとして起動されます。これにより、そのタスクを適切な状態にするために必要なアフィニティーが適用されるか (アクティビティをそこに移動するか、そこから移動するか)、または必要に応じてそのタスクを初期状態にリセットするだけです。
それらがなければ、起動されたアクティビティは古いスタックまたはその他の望ましくない動作の上にプッシュされるだけです (この場合はもちろん)
最新のインテントを受信しないという問題は、次のように解決できると思います(私の頭から):
@Override
public void onActivityReenter (int resultCode, Intent data) {
onNewIntent(data);
}
やってみて!