华为Harmony鸿蒙开发笔记一:PageAbility生命周期

Ability可以理解为组件,跟Android相似但是又区别,Ability分类和作用如下图:

 

Ability有两类,在前端显示的是FA(Feature Ability),就是图中的PageAbility,以及运行在后台的PA(Particle Ability),PA又有Service Ability和Data Ability两种。

就像Android的Activity一样,PageAbility是使用最多的Ability。

先从Ability的生命周期入手,Ability共有六个生命周期,流程如下图:

上代码:

package com.example.abilitydemo;

import com.example.abilitydemo.slice.SecondAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

public class SecondAbility extends Ability {
    static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG");
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(SecondAbilitySlice.class.getName());
        HiLog.error(label, "SecondAbility生命周期 onStart");
    }

    @Override
    protected void onActive() {
        super.onActive();
        HiLog.error(label, "SecondAbility生命周期 onActive");
    }

    @Override
    protected void onInactive() {
        super.onInactive();
        HiLog.error(label, "SecondAbility生命周期 onInactive");
    }

    @Override
    protected void onBackground() {
        super.onBackground();
        HiLog.error(label, "SecondAbility生命周期 onBackground");
    }

    @Override
    protected void onForeground(Intent intent) {
        super.onForeground(intent);
        HiLog.error(label, "SecondAbility生命周期 onForeground");
    }

    @Override
    protected void onStop() {
        super.onStop();
        HiLog.error(label, "SecondAbility生命周期 onStop");
    }
}

运行起来,看日志,当Ability启动时:

12-24 19:38:38.940 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onStart
12-24 19:38:38.976 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onActive

当Ability进入后台:

12-24 19:39:27.409 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onInactive
12-24 19:39:28.140 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onBackground

当Ability从后台返回可见:

12-24 19:40:07.852 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onForeground
12-24 19:40:07.857 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onActive

当Ability退出:

12-24 19:40:41.896 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onInactive
12-24 19:40:42.499 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onBackground
12-24 19:40:42.500 20832-20832/? E 00201/MY_TAG: SecondAbility生命周期 onStop

==================================================================

更全面的看一下,当A跳转B的时候:

12-25 10:53:26.217 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.onInactive
12-25 10:53:26.283 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onStart
12-25 10:53:26.307 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onActive
12-25 10:53:26.953 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.onBackground

当B跳转C的时候:

12-25 10:54:58.660 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onInactive
12-25 10:54:58.698 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 C.onStart
12-25 10:54:58.716 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 C.onActive
12-25 10:54:59.335 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onBackground

当C返回B的时候:

12-25 10:55:45.206 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 C.onInactive
12-25 10:55:45.219 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onForeground
12-25 10:55:45.222 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onActive
12-25 10:55:45.786 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 C.onBackground
12-25 10:55:45.804 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 C.onStop

当B返回A的时候:

12-25 10:56:35.264 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onInactive
12-25 10:56:35.280 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.onForeground
12-25 10:56:35.282 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.onActive
12-25 10:56:35.905 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onBackground
12-25 10:56:35.906 12406-12406/com.example.abilitydemo E 00201/MY_TAG: 生命周期 B.onStop

总结:

==================================================================================

最后,带Slice的生命周期,当A跳转B的时候:

12-25 11:01:54.508 11771-11771/? E 00201/MY_TAG: 生命周期 A.onInactive
12-25 11:01:54.508 11771-11771/? E 00201/MY_TAG: 生命周期 A.Slice.onInactive
12-25 11:01:54.575 11771-11771/? E 00201/MY_TAG: 生命周期 B.onStart
12-25 11:01:54.600 11771-11771/? E 00201/MY_TAG: 生命周期 B.Slice.onStart
12-25 11:01:54.605 11771-11771/? E 00201/MY_TAG: 生命周期 B.onActive
12-25 11:01:54.605 11771-11771/? E 00201/MY_TAG: 生命周期 B.Slice.onActive
12-25 11:01:55.236 11771-11771/? E 00201/MY_TAG: 生命周期 A.onBackground
12-25 11:01:55.237 11771-11771/? E 00201/MY_TAG: 生命周期 A.Slice.onBackground

当B返回A的时候:

12-25 11:02:46.606 11771-11771/? E 00201/MY_TAG: 生命周期 B.onInactive
12-25 11:02:46.606 11771-11771/? E 00201/MY_TAG: 生命周期 B.Slice.onInactive
12-25 11:02:46.623 11771-11771/? E 00201/MY_TAG: 生命周期 A.onForeground
12-25 11:02:46.623 11771-11771/? E 00201/MY_TAG: 生命周期 A.Slice.onForeground
12-25 11:02:46.626 11771-11771/? E 00201/MY_TAG: 生命周期 A.onActive
12-25 11:02:46.626 11771-11771/? E 00201/MY_TAG: 生命周期 A.Slice.onActive
12-25 11:02:47.245 11771-11771/? E 00201/MY_TAG: 生命周期 B.onBackground
12-25 11:02:47.245 11771-11771/? E 00201/MY_TAG: 生命周期 B.Slice.onBackground
12-25 11:02:47.246 11771-11771/? E 00201/MY_TAG: 生命周期 B.onStop
12-25 11:02:47.248 11771-11771/? E 00201/MY_TAG: 生命周期 B.Slice.onStop

总结:

最后,在同一个页面,由SliceA导航到SliceB:

12-25 22:09:45.090 3318-3318/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.SliceA.onInactive
12-25 22:09:45.098 3318-3318/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.SliceB.onStart
12-25 22:09:45.100 3318-3318/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.SliceB.onActive
12-25 22:09:45.100 3318-3318/com.example.abilitydemo E 00201/MY_TAG: 生命周期 A.SliceA.onBackground

Slice之间导航并不会出发Ability的生命周期方法

 

Demo:https://download.csdn.net/download/y280903468/13786913

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值