正如前文所述,Page Ability代表应用的表示层的功能,用于提供与用户交互的能力。
目前来说,Page模板(以下简称Page)是FA中唯一支持的模板。
一个Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。
在HelloWorld应用中,MainAbility类就是一个Page,代码如下:
在HelloWorld应用中,MainAbility这个Page是由一个AbilitySlice构成的,该AbilitySlice就是MainAbilitySlice类,代码如下:
当一个Page由多个AbilitySlice共同构成时,这些AbilitySlice页面提供的业务能力应具有高度相关性。例如,新闻浏览功能可以通过一个Page来实现,其中包含两个AbilitySlice:一个AbilitySlice用于展示新闻列表,另一个AbilitySlice用于展示新闻详情。Page和AbilitySlice的关系如图5-3所示。
图5-3 Page和AbilitySlice的关系
相比于桌面场景,移动场景下应用之间的交互更为频繁。通常,单个应用专注于某个方面的能力开发,当它需要其他能力辅助时,会调用其他应用提供的能力。例如,快递应用提供了联系快递员的业务功能入口,当用户在使用该功能时,会跳转到通话应用的拨号页面。与此类似,Har-monyOS支持不同Page之间的跳转,并可以指定跳转到目标Page中某个具体的AbilitySlice。
虽然一个Page可以包含多个AbilitySlice,但是Page进入前台时界面默认只能展示一个Abili-tySlice。默认展示的AbilitySlice是通过setMainRoute()方法来指定的。
例如,在HelloWorld应用中,MainAbility类就指定了MainAbilitySlice类作为默认展示的AbilitySlice,代码如下:
如果需要更改默认展示的AbilitySlice,可以通过addActionRoute()方法为此AbilitySlice配置一条路由规则。setMainRoute()方法与addActionRoute()方法的使用示例如下:
5.4节将完整展示如何实现AbilitySlice的路由和导航。
不同Page中的AbilitySlice相互不可见,因此无法通过present()或presentForResult()方法直接导航到其他Page的AbilitySlice。
AbilitySlice作为Page的内部单元,以Action的形式对外暴露,因此可以通过配置Intent的Action导航到目标AbilitySlice。Page间的导航可以使用startAbility()或startAbilityForResult()方法,获得返回结果的回调为onAbilityResult()。在Ability中,调用setResult()方法可以设置返回结果,详细用法可参考5.12节中的示例。