4

タスクとバックスタックに関するAndroid の公式オンラインガイドには、自己矛盾する情報があります。誰かが私がそれを理解するのを手伝ってくれるなら、私は感謝します。

まず、次の記述があります。

スタック内のアクティビティは再配置されることはなく、スタックからプッシュおよびポップされるだけです。つまり、現在のアクティビティによって開始されたときにスタックにプッシュされ、ユーザーが [戻る] ボタンを使用してスタックを離れるとポップオフされます。

次に、singleTask起動モードについて説明します。次のステートメントがあります。

システムは新しいタスクを作成し、新しいタスクのルートでアクティビティをインスタンス化します。ただし、アクティビティのインスタンスが別のタスクに既に存在する場合、システムは、新しいインスタンスを作成するのではなく、その onNewIntent() メソッドを呼び出すことによって、インテントを既存のインスタンスにルーティングします。

これを正しく理解していれば、singleTaskアクティビティはタスクのルートにしかなり得ません。なぜなら、それらはそのように作成され、アクティビティがバック スタックで場所を交換することはないからです。しかし、そのようなアクティビティは、そのonNewIntent()メソッドへの呼び出しを受け取ると、どのように反応するのでしょうか?

そのページには、この問題に関する別の発言があります。

別の例として、Android ブラウザー アプリケーションは、要素で singleTask 起動モードを指定することにより、Web ブラウザー アクティビティが常に独自のタスクで開く必要があることを宣言します。これは、アプリケーションが Android ブラウザを開くインテントを発行した場合、そのアクティビティがアプリケーションと同じタスクに配置されないことを意味します。代わりに、ブラウザの新しいタスクが開始されるか、またはブラウザがすでにバックグラウンドで実行されているタスクを持っている場合は、そのタスクが新しいインテントを処理するために進められます。

そのため、このガイドでは、 singleTaskアクティビティを呼び出すと何らかの形でそれが進行すると述べています。しかし、その活動がそのタスクの最上位にない場合、どうしてそれが真実になるのでしょうか? アクティビティが再開されたのか、それともユーザーに表示されずにonNewIntent()メソッドの呼び出しを受け取っただけなのか? 本当にわかりません。

PS: ほぼ同じ質問が 1 年以上前に既に行われていましたが、適切な回答はありませんでした。したがって、技術的には私の質問は重複していますが、明確で明確な回答に値するので、再質問したいという衝動を感じています.

4

1 に答える 1