鸿蒙Ability概述【鸿蒙专题10】
作者:坚果
公众号:""
华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。
鸿蒙开发核心之Ability详解
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability),HarmonyOS支持应用以Ability为单位进行部署。Ability可以分为FA(Feature Ability)和PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
-
FA(Feature Ability) 中文意思是功能能力,支持Page Ability
Page模板是FA唯一支持的模板,用于提供与用户交互的能力。一个Page实例可以包含一组相关页面,每个页面用一个AbilitySlice实例表示。
-
PA(Particle Ability) 这个里面也是支持两个能力, Service Ability 和 Data Ability 我相信你知道它们的意思,就是服务能力和数据能力。
-
Service模板:用于提供后台运行任务的能力。
-
Data模板:用于对外部提供统一的数据访问抽象。
-
例如,新闻APP可以通过一个Page来实现,其中包含了两个AbilitySlice:一个AbilitySlice用于展示新闻列表,另一个AbilitySlice用于展示新闻详情。Page和AbilitySlice的关系如图所示。
Page与AbilitySlice
上面的例子大家看懂了没?一个 Page 可以包含多个 AbilitySlice,但是 Page 进入前台时界面默认只展示一个AbilitySlice。默认展示的 AbilitySlice 是通过 setMainRoute() 方法来指定的。如果需要更改默认展示的 AbilitySlice,可以通过 addActionRoute() 方法为此 AbilitySlice 配置一条路由规则。
package com.example.harmonyosdemo;
import com.example.harmonyosdemo.slice.MainAbilitySlice;
import com.example.harmonyosdemo.slice.SecondAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
//默认显示
super.setMainRoute(MainAbilitySlice.class.getName());
//配置路由规则显示
addActionRoute( "action.second", SecondAbilitySlice.class.getName());
}
}
看图可能更加容易理解。
此时,当其他 Page 实例期望导航到此 AbilitySlice 时,可以在 Intent 中指定 Action。addActionRoute() 方法中使用的动作命名,需要在应用配置文件(config.json)中注册:
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home",
"action.second"
]
}
],
当然在(config.json)中注册Ability时,可以通过配置Ability元素中的“type”属性来指定Ability模板类型,示例如下。
其中,“type”的取值可以为“page”、“service”或“data”,分别代表 Page 模板、Service 模板、Data 模板。结合下面这个图来看知道是怎么回事了,type的属性值取决于你创建Ability是选择的类型,当然你也可以后面再改。
{
"module": {
...
"abilities": [
{
...
"type": "page"
...
}
]
...
}
...
}
- 点赞
- 收藏
- 关注作者
评论(0)