小程序的生命周期

小程序中生命周期可划分为两类:一是,小程序的生命周期;二是,下程序页面的生命周期;其实我们在小程序的开发中还会遇到组件的生命周期,在此不细述。

先说一下小程序的生命周期,也就是定义在app.js中的生命周期:

1. onLaunch(options){}

监听小程序初始化,当小程序初始化完成时触发(全局只触发一次),在小程序冷启动时触发;参数也可以使用 wx.getLaunchOptionsSync 获取。

2. onShow(options){}

小程序启动,或从后台进入前台显示时触发。也可以使用 wx.onAppShow 绑定监听。

3. onHide(options){}

小程序从前台进入后台时触发。也可以使用 wx.onAppHide 绑定监听。

4. onError(){}

小程序发生脚本错误或 API 调用报错时触发。也可以使用 wx.onError 绑定监听。

5. onPageNotFound(function callback){}

小程序要打开的页面不存在时触发。也可以使用 wx.onPageNotFound 绑定监听。

在此期间,我们提及到了小程序的冷启动,那么我们需要了解下关于小程序退出的相关知识:

当用户点击小程序左上角关闭,或者按设备Home键离开微信,小程序并没有直接销毁,而是触发onHide方法进入了后台,短时间内当再次进入微信或者再次打开小程序,小程序会从后台状态进入前台,此为“热启动”。注意当小程序进入后台状态一定时间后,或者系统资源占用过高,微信会真正销毁小程序。用户第一次进入小程序或者在小程序销毁后再次进入小程序是为“冷启动”。

小程序的冷启动:小程序在冷启动时会依次触发onLaunch—>onShow

小程序的热启动:小程序在热启动时会触发onShow

小程序关闭时:即小程序从前台进入后台时触发onHide

这是小程序的生命周期,触发的是App.js中的方法,实际开发中,我们往往会有多个页面,每个页面也有各自的生命周期,所以在关闭小程序时会先执行页面的生命周期函数,然后执行小程序的生命周期函数,同理在小程序启动或者有后台状态进入前台时会执行小程序的生命周期函数,然后执行页面的生命周期函数,从而打开小程序打开页面。

小程序页面的生命周期:

1. onLoad(options){}

页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。

2. onShow(){}

页面显示/切入前台时触发。

3. onReady(){}

页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。

注意:对界面内容进行设置的 API 如wx.setNavigationBarTitle,请在onReady之后进行。

4.onHide(){}

页面隐藏/切入后台时触发。 如 wx.navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。

5. onUnload(){}

页面卸载时触发。如wx.redirectTowx.navigateBack到其他页面时。

6.onPullDownRefresh(){}

监听用户下拉刷新事件。

7. onReachBottom(){}

监听用户上拉触底事件。

  • 可以在app.jsonwindow选项中或页面配置中设置触发距离onReachBottomDistance
  • 在触发距离内滑动期间,本事件只会被触发一次

8. onPageScroll(){}

监听用户滑动页面事件。

9. onShareAppMessage(){}

监听用户点击页面内转发按钮(button 组件 open-type="share")或右上角菜单“转发”按钮的行为,并自定义转发内容。

注意:只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮

10. onResize(){}

小程序屏幕旋转时触发。

11. onTabItemTap(){}

点击 tab 时触发

要想正确的调用页面的生命周期,我们必须先了解路由跳转方式对页面到底是关闭还是仅隐藏到后台,其实仅有navigateTo是保留当前页面的:

1. wx.navigateTo(Object object)

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层

2. wx.switchTab(Object object)

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

3. wx.redirectTo(Object object)

关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

4. wx.reLaunch(Object object)

关闭所有页面,打开到应用内的某个页面

5. wx.navigateBack(Object object)

关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层

官网参考地址 小程序生命周期:https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html

       小程序页面生命周期:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html