相关问题
HarmonyOS 是否有支持应用生命周期、页面生命周期、组件生命周期Hook的API?
245浏览 • 0回复 待解决
监听Ability生命周期
1037浏览 • 1回复 待解决
TabContent 内容的生命周期
254浏览 • 1回复 待解决
如何监听AbilitySlice的生命周期
5040浏览 • 1回复 待解决
Dialog组件生命周期问题
232浏览 • 1回复 待解决
HarmonyOS 模块生命周期管理
132浏览 • 1回复 待解决
Window窗口的生命周期问题
238浏览 • 1回复 待解决
如何监听subwindow生命周期
289浏览 • 1回复 待解决
swiper切换监听生命周期
889浏览 • 1回复 待解决
HarmonyOS App的生命周期是什么?
282浏览 • 2回复 待解决
如何监听全局Ability生命周期?
266浏览 • 1回复 待解决
HarmonyOS 监听所有page的生命周期
267浏览 • 1回复 待解决
HarmonyOS Navigation跳转的组件生命周期
423浏览 • 2回复 待解决
如何知晓navigation组件生命周期?
171浏览 • 1回复 待解决
如何监听指定Ability的生命周期变化?
342浏览 • 1回复 待解决
#鸿蒙学习大百科#如何订阅进程内UIAbility生命周期变化?
150浏览 • 1回复 待解决
JMS 消息怎么设置生命周期呢?
2656浏览 • 1回复 待解决
如何理解和重写onBackPress生命周期
2178浏览 • 1回复 待解决
HarmonyOS navigation主页面生命周期
286浏览 • 1回复 待解决
HarmonyOS 弹框Dialog的生命周期问题
434浏览 • 1回复 待解决
如何使用AbilityStage的生命周期函数
2364浏览 • 1回复 待解决
公共事件的生命周期是怎样的
1469浏览 • 1回复 待解决
HarmonyOS Navigation跳转生命周期咨询
477浏览 • 1回复 待解决
onBackPress生命周期是什么,如何重写
403浏览 • 1回复 待解决
弹窗组件无法调用生命周期接口
2104浏览 • 1回复 待解决
两种生命周期原理与介绍
1. UIAbility组件生命周期。
UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility。
更多内容可查看:Stage模型应用组件和UIAbility组件。
当用户打开,切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。UIAbility的生命周期包括Create,Foreground,Background,Destroy四个状态。
UIAbility实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载,设置WindowStage的事件订阅。
2. 页面/组件生命周期
Navigation生命周期
针对一次操作同步销毁和创建同步创建的场景(如replace),遵循以下规则:
− 涉及到页面的生命周期顺序aboutToAppear(外层自定义组件) -> onWillAppear(进场Destination页面) -> onWillHide(退出Destination页面) -> onAppear(进场页面) -> onWillShow(进场页面) -> onHide(退出页面) -> onWillDisAppear(退场页面) -> onShow(进场页面) -> onDisAppear(退场页面) -> aboutToDisAppear(退场页面)。
− 针对willShow和willHide生命周期有2种情形不会触发:前后台切换,router+Navigation混合使用,使用router跳转导致Navigation中的页面隐藏或者显示时不会触发willShow/willHide的流程。
− Dialog场景触发规则遵循show相关的生命周期(onWillShow,onShow)均从栈底到栈顶依次触发,hide相关生命周期(onWillHide,onHide)均从栈顶到栈底依次触发。
− 一次性清理多个页面,触发多个页面销毁(clear),对应的触发流程为栈顶页面最后销毁,堆栈中的其他页面从栈顶到栈底依次触发onHide -> onWillDisAppear -> onDisAppear。
− clear1,2,3页面,组件生命周期执行顺序, 当前页面是3(1). 销毁除当前页面的其他页面:从栈顶向栈底依次触发onHide -> onWillDisAppear -> onDisAppear(2). 销毁当前页面:onHide -> onWillDisAppear -> onDisAppear。
router
自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。
可参考:生命周期定义。
实际场景中生命周期的应用
场景一:启动框架的手动配置时机选择(性能优化)
场景描述以及生命周期钩子选择
场景:启动框架预加载SDK手动配置时选择。
生命周期:UIAbility生命周期的 onCreate() 回调。
方案说明
在UIAbility的onCreate生命周期回调中进行SDK或者任务初始化。
代码实现
场景二:应用状态初始化(定义全局变量等)
场景描述以及生命周期钩子选择
场景:
1. 将应用状态 EntryAbility中的context和windowStage存储在AppStorage中,以便于其它业务模块使用。
2. 注册全局字体。
3. 初始化启动页,欢迎页,广告页。
生命周期:
1. UIAbility生命周期的 onCreate()回调,
2. UIAbility生命周期的 onWindowStageCreate()回调。
在onCreate设置 context上下文。在onWindowStageCreate回调中初始化页面,将windowStage储存到AppStorage,windowStage.loadContent加载页面。
核心代码
场景三:页面初始化
场景描述以及生命周期钩子选择
场景:
1. Ajax数据请求。
2. 权限获取以及地图定位功能。
3. 定时器的开启与关闭。
生命周期:
1. 页面生命周期的aboutToAppear(),aboutToDisappear()回调。
2. 页面生命周期的onPageShow(),onPageHide()回调。
方案说明
1. 在aboutToAppear生命周期回调 加载应用数据和授权。
2. 在aboutToDisappear生命周期回调中关闭定时器。
代码实现
主页面关键代码:
子窗口页面关键代码:
场景四:状态监听,消息发布订阅
场景:某些场景下需要使用消息的发布订阅模式去实现业务功能,发布消息,订阅消息,改变页面。
生命周期:
1. 页面生命周期的aboutToAppear(),aboutToDisappear()回调。
2. 页面生命周期的 onPageShow(),onPageHide()回调。
当页面或者组件需要使用消息机制处理业务逻辑时,消息的发布订阅时机选择。aboutToAppear生命周期回调中订阅消息,aboutToDisappear生命周期回调中取消订阅。
代码实现
主页面关键代码:点击按钮发布消息:
子组件核心代码:订阅消息,取消订阅:
场景五:NavDestination生命周期时序
针对 NavDestination 的使用以及生命周期回调,主要研究push,pop,replace,clear四种API与Navigation生命周期的关系。
Navigation的push场景
1. 触发API与调用时机
NavPathStack.pushPath()
2. 效果展示与执行结果:
Navigation的pop场景
1. 触发API与调用时机
NavPathStack.pop()
2. 效果展示与执行结果:
Navigation的replace场景
触发API与调用时机
NavPathStack.replacePath()
调用方式:pageOne使用replacePath跳转到pageTwo。
页面1与页面2的生命周期执行顺序:
本场景示例代码: