Harmony EntryAbility
| 生命周期方法 |
触发时机 |
功能描述 |
| onCreate |
Ability创建时触发 |
用于初始化资源 |
| onDestroy |
Ability销毁时触发 |
用于释放资源 |
| onWindowStageCreate |
窗口阶段创建时触发 |
用于加载UI页面 |
| onWindowStageDestroy |
窗口阶段销毁时触发 |
用于释放窗口相关资源 |
| onForeground |
Ability进入前台时触发 |
恢复前台运行状态 |
| onBackground |
Ability进入后台时触发 |
暂停或保存后台状态 |
| onNewWant |
当有新启动请求时触发 |
处理新的启动意图 |
iOS 应用生命周期方法(AppDelegate)
方法名称 调用时机 主要用途
application(_:willFinishLaunchingWithOptions:) 应用启动初期 状态恢复或预处理
application(_:didFinishLaunchingWithOptions:) 启动完成时 初始化UIWindow和根视图控制器
applicationDidBecomeActive(_:) 应用进入前台 恢复暂停任务或启动交互逻辑
applicationWillResignActive(_:) 应用即将失去焦点 暂停敏感操作(如动画、网络请求)
applicationDidEnterBackground(_:) 应用进入后台 保存数据或释放非必要资源
applicationWillEnterForeground(_:) 应用从后台返回前台前 准备数据或UI更新
applicationWillTerminate(_:) 应用终止前
视图控制器生命周期(UIViewController)
viewDidLoad() 视图加载完成 一次性初始化(如设置属性、注册通知)
viewWillAppear(_:) 视图即将显示 更新数据或UI(如刷新表格)
viewDidAppear(_:) 视图已显示 启动动画或埋点追踪
viewWillDisappear(_:) 视图即将消失 停止定时器或取消网络请求
viewDidDisappear(_:) 视图完全消失 释放资源(如移除观察者)
状态转换关系
| 状态转换 |
触发条件 |
典型方法调用链 |
| 启动 |
用户点击图标 |
willFinishLaunching → didFinishLaunching |
| 前后台切换 |
切换到其他应用/返回 |
willResignActive → didEnterBackground / willEnterForeground → didBecomeActive |
| 终止 |
系统回收内存 |
willTerminate(可能不调用) |
Android Activity生命周期方法
| 方法 |
触发时机 |
功能对应关系 |
| onCreate() |
Activity首次创建时调用 |
类比鸿蒙的onCreate,初始化布局和数据 |
| onStart() |
Activity可见但未进入前台时 |
无直接对应,鸿蒙无此细分状态 |
| onResume() |
Activity进入交互状态 |
类似鸿蒙onForeground完成后的活跃状态 |
| onPause() |
Activity失去焦点(如弹窗覆盖) |
类似鸿蒙onBackground前状态 |
| onStop() |
Activity完全不可见 |
对应鸿蒙onBackground的后半阶段 |
| onDestroy() |
Activity销毁前调用 |
功能与鸿蒙onDestroy完全一致 |
与鸿蒙EntryAbility的差异
- 状态粒度:Android细分了onPause(部分遮挡)和onStop(完全不可见),而鸿蒙合并为onBackground
- 窗口管理:鸿蒙通过onWindowStageCreate单独管理窗口,Android的窗口操作直接集成在onCreate
- Android启动流程:onCreate() → onStart() → onResume()
- 鸿蒙EntryAbility启动流程:onCreate() → onWindowStageCreate() → onForeground()
Vue2核心生命周期钩子函数
| 钩子函数 |
调用时机 |
主要用途 |
| beforeCreate |
实例初始化之后,数据观测(data observer)和事件配置之前 |
无法访问data、computed和methods,通常用于初始化非响应式数据 |
| created |
实例创建完成,数据观测和事件配置完成,但未挂载DOM |
可访问data和methods,适合发起异步请求或初始化计算属性 |
| beforeMount |
挂载开始之前,模板已编译为虚拟DOM但未渲染 |
可访问编译后的虚拟DOM结构,但无法操作实际DOM |
| mounted |
组件挂载完成,已渲染为实际DOM |
适合执行DOM操作(如第三方库初始化)或访问$refs |
| beforeUpdate |
数据更新时,虚拟DOM打补丁之前 |
可访问更新前的DOM状态,适合手动移除事件监听器等清理操作 |
| updated |
数据更新导致虚拟DOM重新渲染后 |
避免在此修改数据,可能导致无限循环 |
| beforeDestroy |
实例销毁之前 |
实例仍完全可用,适合清理定时器、取消网络请求等 |
| destroyed |
实例销毁后 |
所有绑定解绑,子实例销毁,仅适合最终清理 |
特殊钩子函数(需特定条件触发)
| 钩子函数 |
触发条件 |
典型应用场景 |
| activated |
使用缓存的组件激活时 |
恢复组件状态或重新获取数据 |
| deactivated |
使用缓存的组件停用时 |
暂停动画或保存临时状态 |
| errorCaptured |
捕获子孙组件错误时(v2.5.0+) |
错误边界处理,记录错误信息 |
生命周期执行流程
- 创建阶段:beforeCreate → created(数据观测和事件配置完成)
- 挂载阶段:beforeMount → mounted(模板编译和DOM渲染完成)
- 更新阶段:beforeUpdate → updated(数据变更导致视图更新)
- 销毁阶段:beforeDestroy → destroyed(实例完全销毁)
注:使用的组件会额外触发activated/deactivated钩子,而不会进入销毁阶段
Vue3核心生命周期钩子函数(选项式API)
| 钩子函数 |
调用时机 |
主要用途 |
| beforeCreate |
实例初始化之后,数据观测和事件配置之前 |
无法访问响应式数据,适合初始化非响应式配置 |
| created |
实例创建完成,数据观测和事件配置完成,但未挂载DOM |
可访问data和methods,适合发起异步请求 |
| beforeMount |
挂载开始之前,模板已编译为虚拟DOM但未渲染 |
可访问编译后的虚拟DOM结构 |
| mounted |
组件挂载完成,已渲染为实际DOM |
适合执行DOM操作(如第三方库初始化) |
| beforeUpdate |
数据更新时,虚拟DOM打补丁之前 |
可访问更新前的DOM状态 |
| updated |
数据更新导致虚拟DOM重新渲染后 |
避免修改数据,可能导致无限循环 |
| beforeUnmount |
实例销毁之前(Vue3重命名自beforeDestroy) |
清理定时器、取消网络请求等 |
| unmounted |
实例销毁后(Vue3重命名自destroyed) |
所有绑定解绑,子实例销毁 |
Composition API新增钩子函数
| 钩子函数 |
调用方式 |
功能特点 |
| setup() |
组件选项或语法 <script setup> |
替代beforeCreate/created,所有Composition API的入口点 |
| onBeforeMount |
onBeforeMount(callback) |
在beforeMount阶段执行,支持异步操作 |
| onMounted |
onMounted(callback) |
替代mounted,支持多回调注册 |
| onBeforeUpdate |
onBeforeUpdate(callback) |
在beforeUpdate阶段执行,可访问更新前状态 |
| onUpdated |
onUpdated(callback) |
替代updated,支持依赖项控制 |
| onBeforeUnmount |
onBeforeUnmount(callback) |
替代beforeUnmount,支持依赖项控制 |
| onUnmounted |
onUnmounted(callback) |
替代unmounted,支持依赖项控制 |
Vue3特有功能钩子
- 自定义Hooks:通过useXxx命名规范封装可复用逻辑(如useCounter),可在多个组件中共享状态和副作
- 响应式系统钩子
- ref(value):创建基本类型响应式引用
- reactive(obj):创建对象类型响应式代理
- watch(source, callback):精确侦听数据变化
- 错误处理钩子:onErrorCaptured(err, vm, info):捕获子孙组件错误(Vue2.5+已有,Vue3增强)
Vue3与Vue2的主要差异
| 对比维度 |
Vue2 |
Vue3 |
| 入口钩子 |
beforeCreate/created |
setup()替代两者 |
| 注册方式 |
选项对象中声明 |
函数式调用(onXxx) |
| 多实例支持 |
单实例 |
可多次调用同一钩子 |
| 类型推断 |
弱类型 |
强类型支持(TypeScript友好) |
| 性能优化 |
全量依赖追踪 |
精准依赖追踪(仅标记使用项) |
Angular核心生命周期钩子函数
| 钩子函数 |
调用时机 |
主要用途 |
| ngOnChanges |
当输入属性(@Input)值变化时调用(首次调用在ngOnInit前) |
响应输入属性变化,获取SimpleChanges对象对比新旧值 |
| ngOnInit |
组件初始化完成(输入属性已设置),视图未渲染时调用 |
初始化数据(如API请求)、设置默认状态 |
| ngDoCheck |
每次变更检测周期运行时调用 |
手动检测Angular忽略的变更(如对象内部属性变化) |
| ngOnDestroy |
组件销毁前调用 |
清理定时器、取消订阅、移除事件监听 |
组件特有钩子函数
| 钩子函数 |
调用时机 |
主要用途 |
| ngAfterContentInit |
内容投影()初始化完成后 |
访问@ContentChild查询的投影内容 |
| ngAfterContentChecked |
每次检查投影内容后 |
监控投影内容的变化 |
| ngAfterViewInit |
组件视图初始化完成后 |
执行DOM操作(如第三方库初始化) |
| ngAfterViewChecked |
每次检查视图后 |
监控视图状态变化 |
生命周期执行顺序
创建阶段:ngOnChanges → ngOnInit → ngDoCheck(输入属性设置和初始化完成)
内容阶段:ngAfterContentInit → ngAfterContentChecked(投影内容处理完成)
视图阶段:ngAfterViewInit → ngAfterViewChecked(视图渲染和检查完成)
销毁阶段:ngOnDestroy(实例完全销毁)
典型使用场景
数据初始化:ngOnInit中加载初始数据
属性监听:ngOnChanges响应父组件传入的配置变化
自定义检测:ngDoCheck处理复杂对象变更
DOM操作:ngAfterViewInit初始化图表/地图等库
资源清理:ngOnDestroy取消未完成的异步请求
所有评论(0)