ability鸿蒙,图解Feature Ability和AbilitySlice的关系

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

1ca71f64490f2fdf1d6ad9c063ba6d3a.png

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

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

40d813909188886226896d39de019204.png    因此,在主页面MainAbility中,仅仅是设置了路由。页面中包含哪些组件,以及每个组件长什么样,是在子页面MainAbilitySlice中完成的。

大家来看这张图:

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

大家再来看这张图:

7ea0778e7f4a0a0db76337e8e3e6b78d.png

一扇窗户可以对应多张窗贴,我们可以从中任意选择一张窗贴,将其贴在窗户上。因此,一个Ability可以对应多个AbilitySlice,我们可以从中任意选择一个AlibitySlice,将其应用到Ability上。

在自动生成的Hello World项目中,是先将画面印刷到窗贴上,然后将窗贴贴到窗户上。当然,我们也可以不要窗贴,将画面直接印刷到窗户上。因此,AlibitySlice是可选的,可以在Alibity中直接调用方法setUIContent()。

打开MainAbilitySlice,将调用setUIContent()的这行代码剪切到MainAbility中,替换掉调用setMainRoute()的那行代码。同时,删除目录slice,这样,其中的MainAbilitySlice也会被删除。此外,在MainAbility中删除导入MainAbilitySlice的那行代码。如下图所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值