Ведущий ограничивает количество отображаемых шаблонов для данной задачи максимум пятью, при этом последний шаблон должен соответствовать одному из следующих типов:
-
NavigationTemplate -
PaneTemplate -
MessageTemplate -
MediaPlaybackTemplate -
SignInTemplate -
LongMessageTemplate
Обратите внимание, что это ограничение относится к количеству шаблонов, а не к количеству экземпляров Screen в стеке. Например, если приложение отправляет два шаблона, находясь на экране A, а затем переходит на экран B, оно может отправить еще три шаблона.
В качестве альтернативы, если каждый экран структурирован таким образом, что отправляется один шаблон, то приложение может добавить пять экземпляров экрана в стек ScreenManager .
Существуют особые случаи применения этих ограничений: обновление шаблонов, а также операции возврата и сброса.
Обновление шаблона
Некоторые обновления контента не учитываются в лимите шаблонов. Как правило, если приложение добавляет новый шаблон того же типа, что и предыдущий, и содержит тот же основной контент, новый шаблон не учитывается в квоте. Например, обновление состояния переключателя строки в ListTemplate не учитывается в квоте. Для получения дополнительной информации о том, какие типы обновлений контента можно считать обновлением, см. документацию по отдельным шаблонам.
Обратные операции
Для включения подпотоков внутри задачи хост определяет, когда приложение удаляет Screen из стека ScreenManager , и обновляет оставшуюся квоту в зависимости от количества шаблонов, на которое приложение откатывается назад.
Например, если приложение отправляет два шаблона, находясь на экране A, затем переходит на экран B и отправляет еще два шаблона, у приложения остается одна квота. Если затем приложение возвращается на экран A, хост сбрасывает квоту до трех, поскольку приложение откатилось назад на два шаблона.
Обратите внимание, что при возврате на предыдущий экран приложение должно отправить шаблон того же типа, что и последний отправленный с этого экрана. Отправка шаблона любого другого типа приведет к ошибке. Однако, пока тип остается неизменным во время возврата, приложение может свободно изменять содержимое шаблона, не влияя на квоту.
Сброс операций
Некоторые шаблоны имеют особую семантику, обозначающую завершение задачи. Например, NavigationTemplate — это представление, которое должно оставаться на экране и обновляться новыми пошаговыми инструкциями для пользователя.
Когда задача достигает одного из этих шаблонов, хост сбрасывает квоту шаблонов, рассматривая этот шаблон как первый шаг новой задачи. Это позволяет приложению начать новую задачу. Для получения дополнительной информации см. документацию по отдельным шаблонам, которые вызывают сброс квоты на хосте.
Если хост получает запрос на запуск приложения из уведомления или из панели запуска, квота также сбрасывается. Этот механизм позволяет приложению запускать новый поток задач из уведомлений, и он остается в силе, даже если приложение уже привязано и находится на переднем плане.