HarmonyOS技术社区 · 2020年12月18日

#2020征文-手机#图解Feature Ability和AbilitySlice的关系

当我们在DevEco Studio中创建一个鸿蒙项目时,如果选择的设备是手机,并且选择的模板是Empty Feature Ability(Java),如下图所示,那么自动生成的Hello World项目中会包含一个MainAbility和一个MainAbilitySlice。接下来,通过两张图帮大家理解MainAbility和MainAbilitySlice的关系。

图片.png

打开MainAbility,它继承了Ability。鸿蒙手机中的任何一个页面都可以用一个Ability来表示(确切地说,是Feature Ability)。在页面启动时,会自动调用回调方法onStart(),在方法体中再调用方法setMainRoute(),从而路由到MainAbilitySlice。如下图所示。

图片.png

打开MainAbilitySlice,它继承了AbilitySlice。鸿蒙手机中的任何一个子页面都可以用一个AbilitySlice来表示。在子页面启动时,会自动调用回调方法onStart,在方法体中再调用方法setUIContent(),从而设置子页面中的UI内容。UI内容通过布局文件ability_main.xml来指定,它位于resources/base/layout这个目录下。如下图所示。

图片.png

因此,在主页面MainAbility中,仅仅是设置了路由。页面中包含哪些组件,以及每个组件长什么样,是在子页面MainAbilitySlice中完成的。
大家来看这张图:
图片.png

MainAbility就相当于一扇窗户,MainAbilitySlice就相当于一张窗贴,两者组合在一起,就呈现出了一扇有窗贴的窗户。窗贴中的画面是印刷在窗贴上的,把画面印刷到窗贴上,就相当于在MainAbilitySlice中调用方法setUIContent(),从而将布局文件中的组件和样式应用到MainAbilitySlice中。
大家再来看这张图:

图片.png

查看更多章节

作者:张荣超老师
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/

推荐阅读
关注数
3010
内容数
446
华为鸿蒙相关技术,活动及资讯,欢迎关注及加入创作
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息