harmonyOS:关于AbilitySlice生命周期详解✨一文搞懂✨

前言

最近学习Ability这个东西,说实话有点难搞,所以在这里整理一下并分享。

一.AbilitySlice概述

官方文档:AbilitySlice作为Page的组成单元,其生命周期是依托于其所属Page生命周期的。AbilitySlice和Page具有相同的生命周期状态和同名的回调,当Page生命周期发生变化时,它的AbilitySlice也会发生相同的生命周期变化。此外,AbilitySlice还具有独立于Page的生命周期变化,这发生在同一Page中的AbilitySlice之间导航时,此时Page的生命周期状态不会改变。

仅个人理解:也就是说AbilitySlice在一般情况下,也就是当AbilitySlice处于前台且具有焦点时,其生命周期状态随着所属Page的生命周期状态的变化而变化,生命周期和Page Ability是一样的,如下图
在这里插入图片描述


关于Page Ability生命周期,可看下面的文章,保证搞懂,拿捏~

harmonyOS:关于Page Ability生命周期详解✨一文搞懂✨


然后就是不一般的情况,当一个Page拥有多个AbilitySlice时,也就是今天主要内容了。例如:MyAbility下有MainAbilitySlice和MainAbility2Slice,当前MainAbilitySlice处于前台并获得焦点,并即将导航到MainAbility2Slice,下面我就演示如何实操。

二.AbilitySlice生命周期

本章内容基于上篇文章:

harmonyOS:关于Page Ability生命周期详解✨一文搞懂✨

1.准备工作

要搞清page跳转时,所发生的一切,我们先写一个跳转代码,然后做好日志,不会的小伙伴看下面的文章
【鸿蒙征程】五.实现页面的跳转✨有参,无参,返回值✨

【鸿蒙征程】四.HiLog日志的使用✨详细记录过程✨


我们先删除一个Page:MainAbility2
在这里插入图片描述
在这里插入图片描述
然后在配置文件config.json中删除,这个page呢就删除了。
在这里插入图片描述

然后我们把MainAbility2Slice路由添加到MainAbility,使得MainAbility下面就有两个AbilitySlice,添加这段代码在onStart方法里

super.addActionRoute("mainAbility2Slice", MainAbility2Slice.class.getName());

在这里插入图片描述
还有最后一步,将这个行为注册到config.json
在这里插入图片描述

1.MainAbilitySlice配置

防止有的小伙伴没看上一个文章,所以在这就完整的把过程说了。

写日志:
将下面的代码放在MainAbilitySlice主类里面

private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, MainAbilitySlice.class.getName());
    static final HiLogLabel LOG_LABEL =
            new HiLogLabel(HiLog.LOG_APP, 0x10002,"MainAbilitySlice");

在这里插入图片描述

这段代码放在MainAbilitySlice里面,也就是onStart方法下面,不是onStart方法里面,后面加了个1是为了和MainAbiliy进行区分

   @Override
    protected void onActive() {
        HiLog.info(LOG_LABEL,"+++++onActive1");
        super.onActive();

    }

    @Override
    protected void onInactive() {
        super.onInactive();
        HiLog.info(LOG_LABEL,"+++++++onInactive1");

    }

    @Override
    protected void onBackground() {
        super.onBackground();
        HiLog.info(LOG_LABEL,"+++++onBackground1");

    }

    @Override
    protected void onForeground(Intent intent) {
        super.onForeground(intent);
        HiLog.info(LOG_LABEL,"+++++onForeground1");

    }

    @Override
    protected void onStop() {
        super.onStop();
        HiLog.info(LOG_LABEL,"+++++onStop1");

    }

别忘了,将这段代码放在onStart方法里面

HiLog.info(LOG_LABEL,"++++onStart1");
2.MainAbility2Slice配置

同理,将这段代码放在MainAbility2Slice主类里面

 private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, MainAbility2Slice.class.getName());
    static final HiLogLabel LOG_LABEL =
            new HiLogLabel(HiLog.LOG_APP, 0x10003,"MainAbility2Slice");

下面这段代码放在MainAbility2Slice里面,也就是onStart方法下面,后面加了个2做区分,还有onStart方法里面别忘了加它的日志

HiLog.info(LOG_LABEL,"++++onStart12");
    @Override
    protected void onActive() {
        HiLog.info(LOG_LABEL,"+++++onActive12");
        super.onActive();

    }

    @Override
    protected void onInactive() {
        super.onInactive();
        HiLog.info(LOG_LABEL,"+++++++onInactive12");

    }

    @Override
    protected void onBackground() {
        super.onBackground();
        HiLog.info(LOG_LABEL,"+++++onBackground12");

    }

    @Override
    protected void onForeground(Intent intent) {
        super.onForeground(intent);
        HiLog.info(LOG_LABEL,"+++++onForeground12");

    }

    @Override
    protected void onStop() {
        super.onStop();
        HiLog.info(LOG_LABEL,"+++++onStop12");

    }
    

到这就成功一半了

3.跳转的实现

这段跳转代码是放在MainAbilitySlice的onStart方法里的。

text.setClickedListener(component -> {
                present(new MainAbility2Slice(),new Intent());
            });

2.运行时的状态

可以看到这里MainAbility和MainAbilitySlice周期是同步的,都进入了激活状态
在这里插入图片描述在这里插入图片描述

上一个过程已经到达了ACTIVE的状态。紧接着点击”你好,世界“
可以看到日志又输出

在这里插入图片描述
在这里插入图片描述

分析一下:
在我们点击跳转页面后,MainAbility是一直处于激活状态的,而MainAbilitySlice是出于onInactive1状态的然后又为onBackgroud1状态;MainAbility2Slice这个页面呢,从onStart12状态onActive12激活状态,从这就可以看出AbilitySlice生命周期与外面的page不同步了!

我们再返回
在这里插入图片描述
在这里插入图片描述
可以看出在返回的过程中呢,AbilitySlice生命周期与MainAbility的生命周期也是不同步的。

总结

在整个跳转的过程中,MyAbility始终处于ACTIVE状态。但是AbilitySlice会根据页面的来回跳转表现出不同的状态,直到onStop方法调用。

没看懂?代码不明白,加我qq:2024810652,给你完整代码


如果对你有帮助,给个赞吧,谢谢啦~
🤞🤞🤞🤞🤞🤞

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值