1 组件的生命周期
对于ArkUI来说,啥是组件?我理解的就是由@Component修饰的代码块,使用 @Component 修饰的组件,ArkUI开发框架会自动为其赋予私有的生命周期方法 aboutToAppear() 和 aboutToDisappear() ,它们用于通知开发者该自定义组件的生命周的变更(文档原话)
aboutToAppear
函数在创建自定义组件的新实例后,在执行其 build() 函数之前执行。需要注意的是,在这个 aboutToAppear 里修改属性会在页面渲染前深宵,如下图中,我在里面修改了curval的值,最终渲染的结果是更新后的值。
aboutToDisappear
函数在自定义组件销毁前执行,官方文档中描述的是不允许在该函数中改变状态变量,特别是 @Link 变量的修改可能会导致应用程序行为不稳定,这点不难理解,因为在复杂的UI应用中这种行为可能会触发一系列的副作用造成不可预测的情况,还有种情况是当前组件的存在由 @Link 修饰的属性控制,若在当前组件销毁时修改了此属性的值可能会导致当前组件无法被正常回收进而引发内存泄漏。所以在 aboutToDisappear 中应避免操作状态变量,仅用来执行一些清理工作,比如取消网络请求、停止动画、释放资源等
2 页面的生命周期
1 aboutToDisappear 和 aboutToAppear
页面本质也是组件,它同组件的区别就是多了 @Entry 修饰符,由此不难理解组件的生命周期函数它都有。此时只有一个问题:组件的生命周期函数和页面的生命周期函数执行顺序,这个问题我们留在最后来看。
2 onPageShow 和 onPageHide
onPageShow 和 onPageHide 分别在页面展示和消失时执行,和 aboutToDisappear 和 aboutToAppear 执行的时机类似,这里就不多赘述了,需要注意的是仅 @Entry 修饰的自定义组件能生效这俩函数。
3 onBackPress
当用户点击返回按钮时触发,该方法返回 boolean 类型,true:表示页面自己处理返回逻辑, 不进行页面路由。false:表示使用默认的返回逻辑。不返回值会作为 false 处理。也是仅 @Entry 修饰的自定义组件生效。这个回调和 Android 中 Activity 的生命周期函数 onBackPress 类似,但是在ArkUI中它是有返回值的,相较于 Android 更加灵活。
4 四个生命周期函数执行顺序
下图可以很清楚的看到页面生命周期函数的执行顺序: aboutToAppear > onPageShow, onPageHide > aboutToDisappear。除了这四个函数外还有个 build 夹在 aboutToAppear 和 onPageShow中间。
3 拓展:父子组件生命周期函数执行顺序
这里直接给答案,为啥。。因为要下班了 没时间截图hhh parent aboutToAppear --> parent build --> Child aboutToAppear --> Child build --> Child build执行完毕 --> parent build执行完毕 --> Index onPageShow
4 最后来个官方文档图
以上内容主要为自己加深印象,有问题的地方大佬们请指出!