小程序生命周期是指小程序从被用户打开到最终被关闭所经历的一系列状态变化过程。理解生命周期对于开发者至关重要,它决定了代码执行的时机,是数据初始化、API调用、资源管理和内存清理的核心依据。一个完整的小程序生命周期涵盖了从注册、启动、显示、运行到隐藏、卸载的全部阶段,每个阶段都有其特定的钩子函数供开发者监听和响应。

应用级生命周期
应用级生命周期函数定义在 app.js 的 App 中,它监控着整个小程序应用的状态。
- onLaunch: 小程序初始化完成时触发,全局只触发一次。通常用于获取用户信息、登录、获取场景值或异步获取基础数据。
- onShow: 小程序启动或从后台进入前台显示时触发。可用于在每次展现给用户时,刷新数据或更新状态。
- onHide: 小程序从前台进入后台时触发。此时应暂停或结束一些耗时的操作,如定时器、音乐播放等,以优化性能。
- onError: 小程序发生脚本错误或 API 调用失败时触发。常用于收集错误信息并上报至监控平台。
提示:应用级生命周期函数是异步执行的,其执行顺序并不完全等同于代码的书写顺序。
页面级生命周期
页面级生命周期函数定义在 Page 的构造函数中,它管理着单个页面的状态流转。
| 生命周期函数 | 触发时机 | 常见用途 |
|---|---|---|
| onLoad | 页面加载时 | 接收页面参数,发起页面数据请求 |
| onShow | 页面显示/切入前台时 | 每次打开页面时刷新数据,如从下级页面返回 |
| onReady | 页面初次渲染完成时 | 操作视图组件,如与 WXML 交互 |
| onHide | 页面隐藏/切入后台时 | 停止页面动画、视频播放等 |
| onUnload | 页面卸载时 | 清理定时器,取消监听事件,防止内存泄漏 |
组件级生命周期
自定义组件拥有自己独立的全套生命周期,与页面生命周期相似但更为细化,尤其是在组件实例被创建和挂载的阶段。
- created: 组件实例刚刚被创建时执行,此时还不能调用
setData。通常用于组件内部的字段初始化。 - attached: 组件实例进入页面节点树后执行。此时
setData已被允许,绝大多数初始化工作在此完成。 - ready: 组件在视图层布局完成后执行。
- moved: 组件实例被移动到节点树另一个位置时执行。
- detached: 组件实例被从页面节点树移除时执行,类似于页面的
onUnload,用于清理工作。
组件还支持 lifetimes 字段来声明生命周期函数,这是更推荐的方式,其优先级高于直接定义在 Component 构造器第一级参数中的生命周期函数。
生命周期的完整流程与数据交互
一个典型的小程序启动流程是:用户点击 -> 触发应用 onLaunch -> 触发应用 onShow -> 进入首页 -> 触发首页 onLoad -> 触发首页 onShow -> 触发首页 onReady。
在生命周期中,数据通过 setData 方法从逻辑层传递到视图层进行渲染。这个过程是异步的,并且由于跨线程通信,频繁或大数据量的 setData 会严重影响性能。最佳实践是:
- 仅在必要时调用
setData。 - 尽量避免一次性设置过大的数据。
- 在
onReady后再进行需要操作视图的setData。
从后台到卸载:生命周期的终结
当用户点击右上角胶囊按钮的“关闭”或将小程序切至后台时,并不会立即触发卸载。小程序会进入后台状态,此时触发应用的 onHide 和当前页面的 onHide。小程序在后台可以运行一小段时间(约5秒),之后会被挂起,所有定时器和回调都会停止。
真正的卸载发生在以下情况:
- 用户主动从任务列表或最近使用中划掉小程序。
- 小程序在后台运行超过一定时间(如30分钟)后被系统自动清理。
- 使用
wx.navigateBack或wx.redirectTo离开当前页面时,原页面会被卸载。
在页面卸载时,onUnload 被调用;在应用被完全结束时,应用生命周期函数不会收到额外的“应用卸载”通知。重要的清理工作(如关闭WebSocket连接、清除全局数据)应在应用和页面的 onHide 或页面的 onUnload 中完成。
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/129418.html