HarmonyOS学习笔记(一)-PageAbility与AbilitySlice
1.关于Page与AbilitySlice的理解
在Android手机应用中,最重要的类是Activity。但是在HarmonyOS中对Activity进行了调整。官方说明:Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供与用户交互的能力。一个Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。 就目前的理解,PageAbility就像是一个窗口,AbilitySlice是这个窗口里面的页签。就好像PageAbility是一个容器,AbilitySlice是容器里面装的东西。比如Chrome浏览器,你可以新建多个窗口,在每个窗口中又可以新建n个页签。
2.PageAbility、AbilitySlice与Activity关系比较
HarmonyOS Android
3.启动Page
事先需要在config.json配置abilities,但是你添加几个abilities,手机桌面就会有几个icon,如下配置:
"abilities": [
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
],
"orientation": "unspecified",
"name": "com.example.firstapplication.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "FirstApp",
"type": "page",
"launchType": "standard"
},
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
],
"orientation": "unspecified",
"name": "com.example.firstapplication.Main2Ability",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "SecondApp",
"type": "page",
"launchType": "standard"
}
]
手机桌面图标如下:
启动代码如下:
Intent intent = new Intent();
//通过Intent中的OperationBuilder类构造operation对象,指定设备标识(空串表示当前设备)、应用包名、Ability名称
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.example.firstapplication")
.withAbilityName("com.example.firstapplication.Main2Ability")
.build();
//把operation设置到intent中
intent.setOperation(operation);
startAbility(intent);
4.启动AbilitySlice
present(new MainAblitySlice(), new Intent());
5.通过addActionRoute()配置路由
对路由的理解,你可以理解成书的目录或者索引。怎么操作呢,需要在AblitiySlice中添加如下代码(addActionRoute那几行):
public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
addActionRoute("action.main2", Main2AblitySlice.class.getName());
addActionRoute("action.main3", Main3AbilitySlice.class.getName());
addActionRoute("action.main4", Main4AbilitySlice.class.getName());
}
}
然后需要在config.json配置如下代码,一定要在这里配,不然没用:
"actions": [
"action.system.home",
"action.main2",
"action.main3",
"action.main4"
]
再然后你就可以通过Action进行跳转了
Intent intent1 = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction("action.main3")
.build();
intent1.setOperation(operation);
startAbility(intent1);
或
Intent intent1 = new Intent();
intent1.setAction("action.main3");
startAbility(intent1);
6.生命周期
这生命周期的图很具体,简单说下与Android的比较吧。 鸿蒙的onStart其实差不多就是Android的onCreate和onStart合并,onActive相当于Android的onResume,onInactive有点像Android的onPause,onBackground差不多就是Android的onStop,onForeground与Android的reRestart对照。onStop与Android的onDestroy。 附android的Activity生命周期图: 待续…
