鸿蒙中应用、UIAbility、窗口、页面、组件之间的关系
接口启动一个UIAbility到后台时,系统会依次触发onCreate()、onBackground()(不会执行onWindowStageCreate()生命周期回调)生命周期回调。自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。这时候uiability即将到前台,然后前台,这时候
在鸿蒙开发中、一个应用包含很多元素,这就很容易混淆,针对各个概念之间的关系做一个系统的梳理。在面试和开发实践中也会用到。
具体关系如下:
- 应用(Application)与 UIAbility:一个应用由一个或多个UIAbility组成。
- UIAbility 与 窗口(WindowStage):UIAbility是“容器”,WindowStage是其绘制界面的实体,在UIAbility启动时被创建。
- UIAbility 与 页面(Page):UIAbility中可加载多个页面(ArkUI),实现特定功能模块。
- 页面与组件(Component):页面由具体的原子组件(如按钮、文本)组成。
总结结构:应用 > UIAbility(任务) > 窗口(WindowStage) > 页面(Page) > 组件(Component)。
- 一个UIAbility + 多个页面:适合单任务应用。
- 多个UIAbility:适合多任务、分屏或多窗口场景。
生命周期
UIAbility的生命周期

UIAbility启动起来,在oncreate中创立了窗口(windowStage),然后onwindowstagecreate,
这时候uiability即将到前台,然后前台,这时候里面的页面级page都加载出来,然后是即将后台,后台,窗口即将销毁,最后uiability销毁。
以下是UIAbility启动到前台和后台两种场景说明,以及生命周期回调流程讲解。
-
UIAbility启动到前台,对应流程图参见上图。
-
当用户启动一个UIAbility时,系统会依次触发onCreate()、onWindowStageCreate()、onForeground()生命周期回调。
-
当用户跳转到其他应用(当前UIAbility切换到后台)时,系统会触发onBackground()生命周期回调。
-
当用户再次将UIAbility切换到前台时,系统会依次触发onNewWant()、onForeground()生命周期回调。
-
-
UIAbility启动到后台,对应流程图参见下图。
-
当用户通过UIAbilityContext.startAbilityByCall()接口启动一个UIAbility到后台时,系统会依次触发onCreate()、onBackground()(不会执行onWindowStageCreate()生命周期回调)生命周期回调。
-
当用户将UIAbility拉到前台,系统会依次触发onNewWant()、onWindowStageCreate()、onForeground()生命周期回调。

-
然后就是page的生命周期,一般使用@Entry装饰
- onPageShow: 当页面显示时触发,用于执行页面显示时的操作。
- onPageHide: 当页面隐藏时触发,用于执行页面隐藏时的操作。
- onBackPress: 当用户点击手机下方的返回按钮时触发。注意,这个回调不同于页面的路由返回或者按钮返回。

最后是组件的生命周期:
即用@Component或@ComponentV2装饰的自定义组件的生命周期,提供以下生命周期接口:
-
aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build函数之前执行。
-
onDidBuild:在组件首次渲染触发的build函数执行完成之后回调该接口,后续组件重新渲染将不回调该接口。开发者可以在这个阶段实现埋点数据上报等不影响实际UI的功能。
-
aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。
-

- 自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。
- 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。
router
自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。

以上便是总结的所有的知识点了,谢谢观看!
更多推荐
所有评论(0)