一 前言

在鸿蒙应用开发中,每一个页面和组件都承载着特定的生命周期。这些生命周期阶段,如同生命的轨迹,记录着页面从诞生到消亡的每一个重要时刻。深入理解和监控这些生命周期,不仅能提升应用性能,还能帮助我们更好地把握用户体验。

 

二 组件的生命周期

鸿蒙@Component组件生命周期详解,在鸿蒙的ArkTS框架中,自定义组件拥有两个至关重要的生命周期函数:aboutToAppear() 和 aboutToDisappear()。为开发者提供了在特定时机执行特定操作的机会。

aboutToAppear(): 组件即将出现时被系统自动调用,在组件的build()函数之前执行,是进行数据初始化、资源加载等操作的绝佳时机。
aboutToDisappear(): 在组件即将销毁时被系统自动调用,适合执行清理工作,如解除事件监听、释放资源等。

通过精准地控制和管理组件的生命周期,我们可以实现更加高效的应用开发和更加流畅的用户体验。此外,结合一些APM性能监控工具,我们还能对应用进行实时分析和调优,确保应用始终运行在最佳状态。

 

三 页面的生命周期

在鸿蒙开发中,页面入口组件扮演着至关重要的角色。这些组件被@Entry装饰,不仅拥有常规的组件生命周期函数,还额外提供了三个特定于页面入口的生命周期函数:onPageShow()、onBackPress()、onPageHide()。这些函数使得开发者能够更精确地控制页面在不同状态下的行为。

页面生命周期函数详解
onPageShow():当页面显示时执行。此时,页面已经完成了构建和渲染,并准备向用户展示。这是进行页面数据加载、动画启动等操作的理想时机。
onBackPress():当用户点击返回键或执行其他返回操作时执行。开发者可以在此函数中执行一些清理工作,如保存用户输入、确认用户是否真的要离开页面等。
onPageHide():当用户按下手机Home键返回到手机主界面或执行其他导致页面隐藏的操作时执行。此时,页面仍然保留在内存中,但不再对用户可见。开发者可以在此函数中暂停一些不必要的后台操作,以节省系统资源。

如果应用被完全销毁(如用户手动退出应用或系统因内存不足而终止应用),则会调用aboutToDisappear()函数。与onPageHide()不同,aboutToDisappear()表示组件即将被完全销毁,不再保留在内存中。因此,开发者应在此函数中执行必要的清理工作,如释放资源、解除事件监听等。

实战指南

合理利用生命周期函数:根据页面和组件的需求,在合适的生命周期函数中执行相应的操作。例如,在onPageShow()中加载数据,在onPageHide()中暂停后台任务。
注意资源管理:在aboutToDisappear()中确保释放所有不再需要的资源,以避免内存泄漏和性能问题。
用户交互与导航:在onBackPress()中处理用户返回操作,确保用户能够流畅地导航和退出页面。
通过深入理解并合理利用页面入口组件的生命周期函数,我们可以打造更加高效、流畅且用户友好的鸿蒙应用。

 

四 UIAbility 的生命周期

当用户在执行应用启动、应用前后台切换、应用退出等操作时,系统会触发相关应用组件的生命周期回调。其中,UIAbility组件的核心生命周期回调包括onCreate、onForeground、onBackground、onDestroy。作为一种包含UI的应用组件,UIAbility的生命周期不可避免地与WindowStage的生命周期存在关联关系。

onCreate():在首次创建UIAbility实例时,系统触发onCreate()回调。    开发者可以在该回调中执行UIAbility整个生命周期中仅发生一次的启动逻辑。

onForeground():在UIAbility切换至前台时且UIAbility的UI可见之前,系统触发onForeground回调。     开发者可以在该回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。系统回调该方法后,UIAbility实例进入前台状态,即UIAbility实例可以与用户交互的状态。UIAbility实例会一直处于这个状态,直到被某些动作打断(例如屏幕关闭、用户跳转到其他UIAbility)。

onBackground():在UIAbility的UI完全不可见之后,系统触发onBackground回调,将UIAbility实例切换至后台状态。    开发者可以在该回调中释放UI不可见时的无用资源,例如停止定位功能,以节省系统的资源消耗。onBackground()执行时间较短,无法提供足够的时间做一些耗时动作。请勿在该方法中执行保存用户数据或执行数据库事务等耗时操作。

onDestroy():在UIAbility实例销毁之前,系统触发onDestroy回调。该回调是UIAbility接收到的最后一个生命周期回调,开发者可以在onDestroy()回调中进行系统资源的释放、数据的保存等操作。

onWindowStageCreate():窗口创建后调用,UIAbility实例创建完成之后,在进入前台之前,系统会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,开发者可以在该回调中进行UI加载、WindowStage的事件订阅。在onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面。

onWindowStageDestroy():窗口销毁前调用,在UIAbility实例销毁之前,系统触发onWindowStageDestroy()回调,开发者可以在该回调中释放UI资源。该回调在WindowStage销毁后执行,此时WindowStage不可以使用。

UIAbility的生命周期示意图如下所示。

五 总结

1. 应用冷启动的初始化流程为:父组件 aboutToAppear --> 父组件 build --> 子组件 aboutToAppear --> 子组件 build --> 子组件 build执行完毕 --> 父组件 build执行完毕 --> Index页面 onPageShow。
2. 调用router.pushUrl接口,跳转到另外一个页面,当前Index页面隐藏,执行页面生命周期Index onPageHide。此处调用的是router.pushUrl接口,Index页面被隐藏,并没有销毁,所以只调用onPageHide。跳转到新页面后,执行初始化新页面的生命周期的流程,流程1。
3. 如果调用的是router.replaceUrl,则当前Index页面被销毁,执行的生命周期流程将变为:Index onPageHide --> MyComponent aboutToDisappear --> Child aboutToDisappear
4. 最小化应用或者应用进入后台,触发Index页面 onPageHide。当前Index页面没有被销毁,所以并不会执行组件的aboutToDisappear。应用回到前台,执行Index onPageShow
5. 退出应用,执行Index onPageHide --> 父组件 aboutToDisappear --> 子组件aboutToDisappear。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐