ホストは、1 つのタスクに対して表示されるテンプレートの数を最大 5 つに制限します。これらのテンプレートのうち、最後のテンプレートは、次のいずれかのタイプである必要があります。
NavigationTemplatePaneTemplateMessageTemplateMediaPlaybackTemplateSignInTemplateLongMessageTemplate
なお、この制限はテンプレートの数に適用されますが、スタック内の Screen インスタンスの数には適用されません。たとえば、アプリが画面 A で 2 つのテンプレートを送信してから、画面 B をプッシュした場合、アプリはあと 3 つのテンプレートを送信できます。
これに対し、各画面が 1 つのテンプレートを送信するように構成されている場合、アプリは 5 つの画面インスタンスを ScreenManager スタックにプッシュできます。
これらの制限については、テンプレートの更新、戻る操作、リセット操作など、特殊なケースがいくつかあります。
テンプレートの更新
特定のコンテンツの更新は、テンプレートの割り当てに対してカウントされません。一般に、アプリが新しいテンプレートをプッシュしても、そのタイプと、そこに含まれるメイン コンテンツが前のテンプレートと同じである限り、その新しいテンプレートは割り当てに対してカウントされません。たとえば、ListTemplate 内で行の切り替え状態を更新しても、割り当てに対するカウントは行われません。どのような種類のコンテンツ更新がテンプレートの更新としてカウントされるかについて詳しくは、個々のテンプレートのドキュメントをご覧ください。
戻る操作
1 つのタスク内でサブフローを有効にできるように、アプリが ScreenManager スタックから Screen をポップすると、ホストがこれを検出し、アプリの戻る操作後のテンプレート数に基づいて残りの割り当てを更新します。
たとえば、アプリが画面 A で 2 つのテンプレートを送信してから、画面 B をプッシュし、さらに 2 つのテンプレートを送信した場合、アプリの残りの割り当ては 1 つになります。アプリが画面 A に戻った場合、ホストは割り当てを 3 にリセットします。これは、アプリが 2 つのテンプレート分前に戻ったためです。
画面に戻るとき、アプリは、その画面で最後に送信したテンプレートと同じタイプのテンプレートを送信する必要があります。それ以外のテンプレート タイプを送信すると、エラーが発生します。ただし、戻る操作時にタイプが同じのままであれば、アプリは割り当てに影響を与えることなくテンプレートのコンテンツを自由に変更できます。
リセット操作
一部のテンプレートには、タスクの終了を示す特別なセマンティクスがあります。たとえば、NavigationTemplate は、画面に継続して残り、ユーザーのための新しいターンバイターン方式の指示で更新される必要があるビューです。
タスクがこれらのテンプレートのいずれかに到達すると、ホストはテンプレートの割り当てをリセットし、そのテンプレートを新しいタスクの最初のステップとして扱います。これにより、アプリは新しいタスクを開始できます。詳細については、個々のテンプレートのドキュメントで、ホスト上でリセットがトリガーされるテンプレートをご確認ください。
ホストが通知アクションまたはランチャーからアプリを起動するインテントを受け取ると、割り当てもリセットされます。このメカニズムにより、アプリがバインドされてフォアグラウンドで実行されている場合でも、アプリは通知から新しいタスクフローを開始できます。