Stage模型生命周期函数
Stage模型生命周期函数
- Stage模型中的基本概念
- 一、自定义组件的生命周期
- 二、UIAbility生命周期
-
- singleton模式
- standard模式
- specified模式
-
- 情况一:未绑定Key(如下图)
- 情况二:绑定Key(如下图)
- 三、AbilityStage组件容器生命周期函数
-
- 非specified模式
- specified模式
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模式
首次进入的执行顺序是页面渲染前(build函数之前),执行onCreate函数,然后执行onWindowStageCreate函数,最后执行onForeground函数。
切换至后台执行onBackground函数
再次进入该应用是先执行onCreate函数,再执行执行onWindowStageCreate函数,最后执行onForeground函数
退出应用的执行顺序是执行onBackground函数,然后执行onWindowStageDestroy函数,再执行onDestroy函数,最后还会执行onForeground函数。
与前者不同的是,每次调用 startAbility() 方法时,都会在应用进程中创建一个新的该类型UIAbility实例,而不会调用onNewWant函数
specified模式
情况一:未绑定Key(如下图)
看红色框可以知道,调用 startAbility() 方法之后,在应用进程中还是会创建一个新的该类型UIAbility实例
情况二:绑定Key(如下图)
看蓝色框可以知道,调用 startAbility() 方法之后,并不会创建一个新的该类型UIAbility实例,而是调用onNewWant回调。
这是为了针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)
提示:在创建MyAbilityStage后,需要在配置文件module.json5中添加一行代码(如下图,内容为其相对地址)
三、AbilityStage组件容器生命周期函数
非specified模式
只有onCreate、onMemoryLevel(调整内存触发)、onConfigurationUpdated(系统全局配置发生变更时触发)可触发
specified模式
还有onAcceptWant(每次进入或切回应用时都会触发)可触发