4

私のアプリはプッシュを受け取り、プッシュの種類に応じてさまざまなアクティビティを開きます。

保留中のインテントを使用TaskStackBuilderして、マニフェストと組み合わせて合成バックスタックを作成しますandroid:parentActivityName

ここまでは、とても簡単です。アプリが起動されていない場合、すべてが期待どおりに機能します。ただし、アプリがバックグラウンドにある(タスクが実行されている) 場合、保留中のインテントも、マニフェストから定義された親で目的のアクティビティを開始しますが、既存のタスクをリセットします。問題は、その間にユーザーによって開始された他のアクティビティもクリアされることです。 ここに画像の説明を入力

したがって、達成したいことは次のとおりです。

  1. アプリが開始されていない場合は、合成バックスタック (MainActivity) で目的のアクティビティを開きます
  2. アプリが実行されている場合は、現在のタスクの順序を尊重し、目的のアクティビティをその上にプッシュします。

で動作させることができないようですTaskStackBuilder

いくつかの洞察をいただければ幸いです。

4

1 に答える 1

4

あなたは本当にこれを行うことはできませんTaskStackBuilder。そのために設計されていません。常に最初からタスクをリセットします。

私は次のことをします:

  • 通知を開始しActivityます。TaskStackBuilder人工的なバックスタックを使用したり、作成したりしないでください。アプリケーションが現在アクティブな場合、これActivityはアプリケーションの現在のタスクで実行され、開いている最新のタスクの上に配置されActivityます。
  • このonCreate()新しいで、これが を使用してタスクのルートであるActivityかどうかを確認します。これがタスクのルートである場合、これを起動する前にアプリがアクティブではなかったことを意味します。この場合、 を使用して人工的なバックスタックを作成し、必要な方法で再度起動することができます (これにより、タスクがリセットされます)。ActivityisTaskRoot()ActivityActivityTaskStackBuilder
于 2016-08-25T15:21:01.557 に答える