主机将针对给定任务显示的模板数限制为最多 5 个,在这 5 个模板中,最后一个模板必须是以下某种类型:
NavigationTemplatePaneTemplateMessageTemplateMediaPlaybackTemplateSignInTemplateLongMessageTemplate
请注意,此限制适用于模板数,而不是堆栈中的 Screen 实例数。例如,如果在屏幕 A 中,应用发送了 2 个模板,然后推送屏幕 B,那么它现在可以再发送 3 个模板。
或者,如果将每个屏幕的结构都设置为发送单个模板,那么应用可以将 5 个屏幕实例推送到 ScreenManager 堆栈上。
这些限制有一些特殊情况:模板刷新、返回和重置操作。
模板刷新
某些内容更新不计入模板限制。一般来说,如果应用推送的新模板所属的类型及其包含的主要内容与之前的模板相同,新模板就不会被计入配额。例如,更新 ListTemplate 中某一行的切换状态不会计入配额。如需详细了解可将哪些类型的内容更新视为刷新,请参阅各个模板的文档。
返回操作
为了在任务中启用子流,主机会检测应用何时从 ScreenManager 堆栈中弹出 Screen,并根据应用倒退的模板数更新剩余配额。
例如,如果在屏幕 A 中,应用发送了 2 个模板,然后推送屏幕 B 并且又发送了 2 个模板,那么应用的剩余配额就为 1。如果应用随后弹回到屏幕 A,主机会将配额重置为 3,因为应用倒退了 2 个模板。
请注意,当弹回到某个屏幕时,应用发送的模板所属的类型必须与该屏幕上次发送的模板的类型相同。发送任何其他类型的模板会导致出现错误。不过,只要类型在返回操作期间保持不变,应用就可以随意修改模板的内容,而不会影响配额。
重置操作
某些模板具有表示任务结束的特殊语义。例如,NavigationTemplate 是一个视图,它应该会持续显示在屏幕上,并使用新的精细导航指示进行刷新,以供用户使用。
当任务到达其中一个模板时,主机会重置模板配额,将该模板当作新任务的第一步来对待。从而使应用能够开始新任务。如需了解详情,请参阅各个模板的文档,了解哪些模板会在主机上触发重置操作。
如果主机收到通过通知操作或从启动器启动应用的 intent,也会重置配额。此机制使应用能够从通知开始新任务流,即使应用已绑定且在前台运行,也是如此。