まず、アクティビティ B のタスクを長期間使用していないときに、システムがアクティビティ B を強制終了しないようにします。
ユーザーが長時間タスクを離れた場合、システムはルート アクティビティを除くすべてのアクティビティのタスクをクリアします。ユーザーが再びタスクに戻ると、ルート アクティビティのみが復元されます。システムがこのように動作するのは、長い時間が経過した後、ユーザーが前に行っていたことを放棄し、新しいことを始めるためにタスクに戻る可能性が高いためです。
この動作を変更するために使用できるアクティビティ属性がいくつかあります。
alwaysRetainTaskState
: タスクのルート アクティビティでこの属性が「true」に設定されている場合、前述のデフォルトの動作は発生しません。タスクは、長期間経過した後でもすべてのアクティビティをスタックに保持します。<activity>
したがって、A のマニフェスト ファイルのタグの下で、これを true に設定する必要があります。
第二に、必要はありませんsingleTop
。Android docs からこの図を確認してください。これはあなたが望むものだと思います。起動モードを指定するアクティビティを開始するsingleTask
場合、そのアクティビティのインスタンスがバックグラウンド タスクに存在する場合、そのタスク全体がフォアグラウンドに移動します。この時点で、バック スタックには、スタックの一番上にある、前に持ち出されたタスクからのすべてのアクティビティが含まれます。
singleTask
したがって、の代わりに、A と B のタグの下にも追加する必要がありますsingleTop
。次に、通知からアクティビティ A をフラグなしで起動する必要がありますがFLAG_ACTIVITY_NEW_TASK
、FLAG_ACTIVITY_REORDER_TO_FRONT
(オプション)。
私はこれを自分で試したことはありませんが、うまくいくと強く信じています. 試してみて、そうでない場合はお知らせください。