鸿蒙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,在此期间的生命周期状态变化顺序为:

 

  1. FooAbilitySlice 从 ACTIVE 状态变为 INACTIVE 状态。
  2. BarAbilitySlice 则从 INITIAL 状态首先变为 INACTIVE 状态,然后变为 ACTIVE 状态(假定此前 BarAbilitySlice 未曾启动)。
  3. FooAbilitySlice 从 INACTIVE 状态变为 BACKGROUND 状态。

对应两个 slice 的生命周期方法回调顺序为:

FooAbilitySlice.onInactive() --> BarAbilitySlice.onStart() --> BarAbilitySlice.onActive() --> FooAbilitySlice.onBackground()

在整个流程中,MyAbility 始终处于 ACTIVE 状态。但是,当 Page 被系统销毁时,其所有已实例化的 AbilitySlice 将联动销毁,而不仅是处于前台的AbilitySlice。

 

注意:ACTIVE表示激活起作用,INACTIVE表示未被激活起作用。Foreground表示运行在前台,

Background表示运行在后台。

 

 

以上是关于鸿蒙OS 生命周期的主要内容,如果未能解决你的问题,请参考以下文章

鸿蒙HarMonyOS的Page Ability生命周期

关于片段生命周期

调用 replace() 时片段的生命周期是啥?

Android片段生命周期:onResume调用了两次

在不存在的片段上调用片段生命周期和 onCreate 的问题

四华为鸿蒙HarmonyOS应用开发之Java开发下Page Ability生命周期