Ability生命周期以及Intent意图跳转
Ability
Page模板(以下简称“Page”)是FA唯一支持的模板,用于提供与用户交互的能力。一个Page可以由一个或多个AbilitySlice构成,AbilitySlice是指应用的单个页面及其控制逻辑的总和。当一个Page由多个AbilitySlice共同构成时,这些AbilitySlice页面提供的业务能力应具有高度相关性。
Ability生命周期
Ability一共有onStart、onActive、onInactive、onBackground、onForeground、onStop几个主要方法,从官网给出的生命周期思维导图就可以基本看出来他们之间的关系。
其中onStart()方法必须重写,因为要设置对应的AbilitySlice。
AbilitySlice
在HarmonyOS应用中,每一个Page是一个页面容器,每一个页面容器可以包含多个页面Ability而每一个Ability对应一个AbilitySlice;虽然Page是一个页面容器,会包含有多个页面,但是当Page进入前台时只会显示一个界面;而系统默认启动的页面就是程序的主页,通过setMainRoute()设置主路由的方法来来进行设置。
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
通过setMainRoute方法可以设置在前台显示的一个页面,但是当一个前台需要显示多个多个页面的时候就需要使用到addActionRoute方法进行添加:
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
//action_java自己定义的action行为
//JavaUiAbility.class.getName() 包名地址
addActionRoute("action_java",JavaUiAbility.class.getName());
addActionRoute("action_second",SecondAbility.class.getName());
}
添加了之后发现没有用,因为我们自己定义的action行为没有进行注册,要注册到config.json配置文件里面对应的Ability下,比如我们是在MainAbility里面操作的,那么MainAbility的skills下的actions就需要变成这个样子:
"actions": [
"action.system.home",
"action_java",
"action_second"
]
Intent
Intent是对象之间传递信息的载体。例如,当一个Ability需要启动另一个Ability时,或者一个AbilitySlice需要导航到另一个AbilitySlice时,可以通过Intent指定启动的目标同时携带相关数据。Intent的构成元素包括Operation与Parameters。
通过intent的简介可以看到intent主要实现两个作用,1指定要跳转的目标,2携带参数跳转到目标。
Operation
通过Intent的Operation构建对象,实现跳转目标,指定设备标识,应用包名,Ability名称等参数后可以进行Ability之间的跳转ÿ