> 文档中心 > Stage模型生命周期函数

Stage模型生命周期函数

Stage模型生命周期函数

  • Stage模型中的基本概念
  • 一、自定义组件的生命周期
  • 二、UIAbility生命周期
    • singleton模式
    • standard模式
    • specified模式
      • 情况一:未绑定Key(如下图)
      • 情况二:绑定Key(如下图)
  • 三、AbilityStage组件容器生命周期函数
    • 非specified模式
    • specified模式

Stage模型中的基本概念

Stage模型生命周期函数
在ArKUI Page、Window、WindowStage、UIAbility和AbilityStage中均存在生命周期函数
    UIAbility和AbilityStage组件容器的生命周期函数在预览器中很难进行可视化展示(console打印),而openHarmony暂时没有真机模拟器可使用,在没有开发版的前提下,可以使用harmonyOS的真机模拟器来学习

一、自定义组件的生命周期

在这里插入图片描述
    首次进入的执行顺序是页面渲染前(build函数之前),执行aboutToAppear函数,然后执行onPageshow函数,而且在界面每次显示时也会执行一次。
    进入下一个页面的执行顺序是先执行当前页面的onPageHide函数,再执行下一个页面的aboutToAppear函数,最后执行下一个页面的onPageHide函数。
    返回上一个页面的执行顺序是如果是用户点击了,则会先执行onBackPress函数(可在里面自定义自己处理返回逻辑),否则就直接执行当前页面的onPageHide函数,然后执行上一个页面的onPageShow函数,然后执行当前页面的aboutToDisappear函数。

问题:观察最后一个紫色框,testPage页面没有执行onPageHide函数?
  这是目前ide的一些小bug,部分日志打印丢失,但是生命周期函数是照常按序进行的

二、UIAbility生命周期

UIAbility组件启动模式有三种:singleton(单实例模式)standard(标准实例模式)和specified(指定实例模式)
更改启动模式的方式在配置文件中添加"launchType"字段配置为对应模式

{  "module": {    // ...    "abilities": [      { "launchType": "standard", // ...      }    ]  }}

singleton模式

在这里插入图片描述
  首次进入的执行顺序是页面渲染前(build函数之前),执行onCreate函数,然后执行onWindowStageCreate函数,最后执行onForeground函数。
  切换至后台执行onBackground函数,这里理论上不止调用这个函数,此处应该是日志丢失了,应该还会调用onNewWant回调
  再次进入该应用是执行onForeground函数
  退出应用的执行顺序是执行onBackground函数,然后执行onWindowStageDestroy函数,最后执行onDestroy函数。
  需要注意的是,假如我们是通过手机的资源管理器直接中止关闭了应用,只会执行切换至后台所触发的onBackground函数,而onDestroy函数并不能触发。在这里的进程被中断了,生命周期函数无法执行,数据也无法保存。

standard模式

Stage模型生命周期函数
  首次进入的执行顺序是页面渲染前(build函数之前),执行onCreate函数,然后执行onWindowStageCreate函数,最后执行onForeground函数。
  切换至后台执行onBackground函数
  再次进入该应用是先执行onCreate函数,再执行执行onWindowStageCreate函数,最后执行onForeground函数
  退出应用的执行顺序是执行onBackground函数,然后执行onWindowStageDestroy函数,再执行onDestroy函数,最后还会执行onForeground函数。
与前者不同的是,每次调用 startAbility() 方法时,都会在应用进程中创建一个新的该类型UIAbility实例,而不会调用onNewWant函数

specified模式

情况一:未绑定Key(如下图)

Stage模型生命周期函数
Stage模型生命周期函数
  看红色框可以知道,调用 startAbility() 方法之后,在应用进程中还是会创建一个新的该类型UIAbility实例

情况二:绑定Key(如下图)

Stage模型生命周期函数

Stage模型生命周期函数
  看蓝色框可以知道,调用 startAbility() 方法之后,并不会创建一个新的该类型UIAbility实例,而是调用onNewWant回调。

这是为了针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)

Stage模型生命周期函数

提示:在创建MyAbilityStage后,需要在配置文件module.json5中添加一行代码(如下图,内容为其相对地址)
Stage模型生命周期函数

三、AbilityStage组件容器生命周期函数

非specified模式

Stage模型生命周期函数
  只有onCreateonMemoryLevel(调整内存触发)、onConfigurationUpdated(系统全局配置发生变更时触发)可触发

specified模式

Stage模型生命周期函数
  还有onAcceptWant(每次进入或切回应用时都会触发)可触发