一、自定义组件和页面的关系

属性 描述
自定义组件 @Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期
页面 即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期

自定义组件生命周期流程图

二、组件生命周期

用@Component装饰的自定义组件的生命周期。

属性 描述
aboutToAppear 组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行
onDidBuild 组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现
aboutToDisappear aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定

三、页面生命周期

用@Entry装饰的组件生命周期。

属性 描述
onPageShow 页面每次显示时触发一次,包括路由过程、应用进入前台等场景
onPageHide 页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景
onBackPress 当用户点击返回按钮时触发

四、自定义组件的创建和渲染流程

  1. 自定义组件的创建:自定义组件的实例由ArkUI框架创建。
  2. 初始化自定义组件的成员变量:通过本地默认值或者构造方法传递参数来初始化自定义组件的成员变量,初始化顺序为成员变量的定义顺序。
  3. 如果开发者定义了aboutToAppear,则执行aboutToAppear方法。
  4. 在首次渲染的时候,执行build方法渲染系统组件,如果子组件为自定义组件,则创建自定义组件的实例。在首次渲染的过程中,框架会记录状态变量和组件的映射关系,当状态变量改变时,驱动其相关的组件刷新。
  5. 如果开发者定义了onDidBuild,则执行onDidBuild方法。

五、自定义组件重新渲染

  1. 框架观察到了变化,将启动重新渲染。
  2. 根据框架持有的两个map(自定义组件的创建和渲染流程中第4步),框架可以知道该状态变量管理了哪些UI组件,以及这些UI组件对应的更新函数。执行这些UI组件的更新函数,实现最小化更新。

六、自定义组件的删除

  1. 在删除组件之前,将调用其aboutToDisappear生命周期函数,标记着该节点将要被销毁。ArkUI的节点删除机制是:后端节点直接从组件树上摘下,后端节点被销毁,对前端节点解引用,前端节点已经没有引用时,将被JS虚拟机垃圾回收。
  2. 自定义组件和它的变量将被删除,如果其有同步的变量,比如@Link、@Prop、@StorageLink,将从同步源上取消注册。

注意: 不建议在生命周期aboutToDisappear内使用async await,这个行为阻止了自定义组件的垃圾回收。

七、自定义组件及页面生命周期的其他用法

自定义组件及页面生命周期的其他用法大家可以参考自定义组件及页面生命周期官方文档进行系统学习。

八、小结

本章言简意赅的为大家介绍了自定义组件及页面生命周期,下一章,为大家介绍ArkTs的网络技术应用。最后,创作不易,如果大家觉得我的文章对学习鸿蒙有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐