由于小程序分为应用和页面两个部分,所以小程序的生命周期就涉及到以下部分。
分别是:
- 应用的生命周期。
- 页面的生命周期。
- 应用的生命周期对页面生命周期的影响。
- 路由变化对页面生命周期的影响。
一、应用的生命周期
属性 | 类型 | 描述 | 触发时机 |
---|---|---|---|
onLaunch | Function | 生命周期函数--监听小程序初始化 | 当小程序初始化完成时,会触发 onLaunch(全局只触发一次) |
onShow | Function | 生命周期函数--监听小程序显示 | 当小程序启动,或从后台进入前台显示,会触发 onShow |
onHide | Function | 生命周期函数--监听小程序隐藏 | 当小程序从前台进入后台,会触发 onHide |
前台、后台定义: 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。
应用的生命周期1、用户首次打开小程序,触发 onLaunch(全局只触发一次)。
2、小程序初始化完成后,触发 onShow 方法,监听小程序显示。
3、小程序从前台进入后台,触发 onHide 方法。
4、小程序从后台进入前台显示,触发 onShow 方法。
5、小程序后台运行一定时间,或系统资源占用过高,会被销毁。
示例代码:
App({
onLaunch: function() {
// Do something initial when launch.
},
onShow: function() {
// Do something when show.
},
onHide: function() {
// Do something when hide.
},
onError: function(msg) {
console.log(msg)
},
globalData: 'I am global data'
})
小程序提供了全局的 getApp()函数,可以获取到小程序实例。
var appInstance = getApp()
console.log(appInstance.globalData) // I am global data
注意:
1、App() 必须在 app.js 中注册,且不能注册多个。
2、不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例。
3、不要在 onLaunch 的时候调用 getCurrentPage(),此时 page 还没有生成。
4、通过 getApp() 获取实例之后,不要私自调用生命周期函数。
二、页面生命周期
属性 | 类型 | 描述 |
---|---|---|
data | Object | 页面的初始数据 |
onLoad | Function | 生命周期函数--监听页面加载 |
onReady | Function | 生命周期函数--监听页面初次渲染完成 |
onShow | Function | 生命周期函数--监听页面显示 |
onHide | Function | 生命周期函数--监听页面隐藏 |
onUnload | Function | 生命周期函数--监听页面卸载 |
1、小程序注册完成后,加载页面,触发 onLoad 方法。
2、页面载入后触发 onShow 方法,显示页面。
3、首次显示页面,会触发 onReady 方法,渲染页面元素和样式,一个页面只会调用一次。
4、当小程序后台运行或跳转到其他页面时,触发 onHide 方法。
5、当小程序有后台进入到前台运行或重新进入页面时,触发 onShow 方法。
6、当使用重定向方法 wx.redirectTo(OBJECT) 或关闭当前页返回上一页 wx.navigateBack(),触发 onUnload。
总结:
1、onLoad: 页面加载。
a、一个页面只会调用一次。
b、参数可以获取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。
2、onShow: 页面显示。
a、每次打开页面都会调用一次。
3、onReady: 页面初次渲染完成。
a、一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
b、对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。详见生命周期
4、onHide: 页面隐藏。
a、当navigateTo或底部tab切换时调用。
5、onUnload: 页面卸载。
a、当redirectTo或navigateBack的时候调用。
示例代码:
Page({
data: {
text: "This is page data."
},
onLoad: function(options) {
// Do some initialize when page load.
},
onReady: function() {
// Do something when page ready.
},
onShow: function() {
// Do something when page show.
},
onHide: function() {
// Do something when page hide.
},
onUnload: function() {
// Do something when page close.
},
onPullDownRefresh: function() {
// Do something when pull down.
},
onReachBottom: function() {
// Do something when page reach bottom.
},
onShareAppMessage: function () {
// return custom share data when user share.
},
// Event handler.
viewTap: function() {
this.setData({
text: 'Set some data for updating view.'
})
},
})
三、应用生命周期影响页面生命周期
1、小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
2、当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
3、当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。
四、路由变化对页面生命周期的影响
1、在小程序中所有页面的路由全部由框架进行管理,框架以栈的形式维护当前的所有页面,当发生路由切换的时候,页面栈的表现如下:
2、对于路由的触发方式以及页面生命周期函数如下:
3、Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面,D 页面是从 C 页面打开的页面为例):
网友评论