鸿蒙OS 生命周期
Posted 月疯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鸿蒙OS 生命周期相关的知识,希望对你有一定的参考价值。
系统管理或用户操作等行为均会引起 Page 实例在其生命周期的不同状态之间进行转换。Ability 类提供的回调机制能够让 Page 及时感知外界变化,从而正确地应对状态变化(比如释放资源),这有助于提升应用的性能和稳健性。
page的生命周期:
package com.example.myapplication;
import com.example.myapplication.slice.MainAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.ai.cv.text.Text;
public class MainAbility extends Ability {
//启动page的页面
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
//Page 在此之后进入 ACTIVE 状态,该状态是应用与用户交互的状态
@Override
protected void onActive() {
super.onActive();
}
//当page失去焦点的时候调用
@Override
protected void onInactive() {
super.onInactive();
}
//如果 Page 不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后 Page 进入 BACKGROUND 状态
@Override
protected void onBackground() {
super.onBackground();
}
//当page还驻留到系统后台是调用
@Override
protected void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
protected void onStop() {
super.onStop();
}
}
abilitySlice的生命周期:
AbilitySlice 作为 Page 的组成单元,其生命周期是依托于其所属 Page 生命周期的。AbilitySlice 和 Page 具有相同的生命周期状态和同名的回调,当 Page 生命周期发生变化时,它的 AbilitySlice 也会发生相同的生命周期变化。此外, AbilitySlice 还具有独立于 Page 的生命周期变化,这发生在同一 Page 中的 AbilitySlice 之间导航时,此时 Page 的生命周期状态不会改变。
AbilitySlice 生命周期回调与 Page 的相应回调类似,因此不再赘述。由于 AbilitySlice 承载具体的页面,开发者必须重写 AbilitySlice 的 onStart() 回调,并在此方法中通过 setUIContent() 方法设置页面。
package com.example.myapplication.slice;
import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
//这表示一个FA
public class ThreeAbilitySlice extends AbilitySlice {
//这表示一个FA
@Override
public void onStart(Intent intent) {
super.onStart(intent);
setUIContent(ResourceTable.Layout_ability_three_slice);
}
//Fa 在此之后进入 ACTIVE 状态,该状态是应用与用户交互的状态
@Override
protected void onActive() {
super.onActive();
}
//当Fa失去焦点的时候调用
@Override
protected void onInactive() {
super.onInactive();
}
//如果 Fa 不再对用户可见,系统将调用此回调通知开发者用户进行相应的资源释放,此后 Fa 进入 BACKGROUND 状态
@Override
protected void onBackground() {
super.onBackground();
}
//当Fa还驻留到系统后台是调用
@Override
protected void onForeground(Intent intent) {
super.onForeground(intent);
}
@Override
protected void onStop() {
super.onStop();
}
}
AbilitySlice 实例创建和管理通常由应用负责,系统仅在特定情况下会创建 AbilitySlice 实例。例如,通过导航启动某个 AbilitySlice 时,是由系统负责实例化;但是在同一个 Page 中不同的 AbilitySlice 间导航时则由应用负责实例化。
Page 与 AbilitySlice 生命周期关联:
当 AbilitySlice 处于前台且具有焦点时,其生命周期状态随着所属 Page 的生命周期状态的变化而变化。当一个 Page 拥有多个 AbilitySlice 时,例如:MyAbility 下有 FooAbilitySlice 和 BarAbilitySlice,当前 FooAbilitySlice 处于前台并获得焦点,并即将导航到 BarAbilitySlice,在此期间的生命周期状态变化顺序为:
- FooAbilitySlice 从 ACTIVE 状态变为 INACTIVE 状态。
- BarAbilitySlice 则从 INITIAL 状态首先变为 INACTIVE 状态,然后变为 ACTIVE 状态(假定此前 BarAbilitySlice 未曾启动)。
- FooAbilitySlice 从 INACTIVE 状态变为 BACKGROUND 状态。
对应两个 slice 的生命周期方法回调顺序为:
FooAbilitySlice.onInactive() --> BarAbilitySlice.onStart() --> BarAbilitySlice.onActive() --> FooAbilitySlice.onBackground()
在整个流程中,MyAbility 始终处于 ACTIVE 状态。但是,当 Page 被系统销毁时,其所有已实例化的 AbilitySlice 将联动销毁,而不仅是处于前台的AbilitySlice。
注意:ACTIVE表示激活起作用,INACTIVE表示未被激活起作用。Foreground表示运行在前台,
Background表示运行在后台。
以上是关于鸿蒙OS 生命周期的主要内容,如果未能解决你的问题,请参考以下文章