美文网首页小程序时光轴
微信小程序之生命周期

微信小程序之生命周期

作者: 侯工 | 来源:发表于2018-12-04 18:09 被阅读19次

    由于小程序分为应用和页面两个部分,所以小程序的生命周期就涉及到以下部分。

    分别是:

    • 应用的生命周期。
    • 页面的生命周期。
    • 应用的生命周期对页面生命周期的影响。
    • 路由变化对页面生命周期的影响。

    一、应用的生命周期

    属性 类型 描述 触发时机
    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 页面打开的页面为例):

    五、通过实例我们一起理解一下官方的小程序页面的生命周期:

    相关文章

      网友评论

        本文标题:微信小程序之生命周期

        本文链接:https://www.haomeiwen.com/subject/fvqvcqtx.html