微信小程序之生命周期

由于小程序分為應(yīng)用和頁面兩個(gè)部分,所以小程序的生命周期就涉及到以下部分。

分別是:

  • 應(yīng)用的生命周期。
  • 頁面的生命周期。
  • 應(yīng)用的生命周期對頁面生命周期的影響。
  • 路由變化對頁面生命周期的影響。

一、應(yīng)用的生命周期

屬性 類型 描述 觸發(fā)時(shí)機(jī)
onLaunch Function 生命周期函數(shù)--監(jiān)聽小程序初始化 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
onShow Function 生命周期函數(shù)--監(jiān)聽小程序顯示 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
onHide Function 生命周期函數(shù)--監(jiān)聽小程序隱藏 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide

前臺(tái)、后臺(tái)定義: 當(dāng)用戶點(diǎn)擊左上角關(guān)閉,或者按了設(shè)備 Home 鍵離開微信,小程序并沒有直接銷毀,而是進(jìn)入了后臺(tái);當(dāng)再次進(jìn)入微信或再次打開小程序,又會(huì)從后臺(tái)進(jìn)入前臺(tái)。

應(yīng)用的生命周期

1、用戶首次打開小程序,觸發(fā) onLaunch(全局只觸發(fā)一次)。
2、小程序初始化完成后,觸發(fā) onShow 方法,監(jiān)聽小程序顯示。
3、小程序從前臺(tái)進(jìn)入后臺(tái),觸發(fā) onHide 方法。
4、小程序從后臺(tái)進(jìn)入前臺(tái)顯示,觸發(fā) onShow 方法。
5、小程序后臺(tái)運(yùn)行一定時(shí)間,或系統(tǒng)資源占用過高,會(huì)被銷毀。

示例代碼:

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()函數(shù),可以獲取到小程序?qū)嵗?/p>

var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

注意:
1、App() 必須在 app.js 中注冊,且不能注冊多個(gè)。
2、不要在定義于 App() 內(nèi)的函數(shù)中調(diào)用 getApp() ,使用 this 就可以拿到 app 實(shí)例。
3、不要在 onLaunch 的時(shí)候調(diào)用 getCurrentPage(),此時(shí) page 還沒有生成。
4、通過 getApp() 獲取實(shí)例之后,不要私自調(diào)用生命周期函數(shù)。

二、頁面生命周期

屬性 類型 描述
data Object 頁面的初始數(shù)據(jù)
onLoad Function 生命周期函數(shù)--監(jiān)聽頁面加載
onReady Function 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
onShow Function 生命周期函數(shù)--監(jiān)聽頁面顯示
onHide Function 生命周期函數(shù)--監(jiān)聽頁面隱藏
onUnload Function 生命周期函數(shù)--監(jiān)聽頁面卸載
頁面生命周期

1、小程序注冊完成后,加載頁面,觸發(fā) onLoad 方法。
2、頁面載入后觸發(fā) onShow 方法,顯示頁面。
3、首次顯示頁面,會(huì)觸發(fā) onReady 方法,渲染頁面元素和樣式,一個(gè)頁面只會(huì)調(diào)用一次。
4、當(dāng)小程序后臺(tái)運(yùn)行或跳轉(zhuǎn)到其他頁面時(shí),觸發(fā) onHide 方法。
5、當(dāng)小程序有后臺(tái)進(jìn)入到前臺(tái)運(yùn)行或重新進(jìn)入頁面時(shí),觸發(fā) onShow 方法。
6、當(dāng)使用重定向方法 wx.redirectTo(OBJECT) 或關(guān)閉當(dāng)前頁返回上一頁 wx.navigateBack(),觸發(fā) onUnload。

總結(jié):
1、onLoad: 頁面加載。
a、一個(gè)頁面只會(huì)調(diào)用一次。
b、參數(shù)可以獲取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。
2、onShow: 頁面顯示。
a、每次打開頁面都會(huì)調(diào)用一次。
3、onReady: 頁面初次渲染完成。
a、一個(gè)頁面只會(huì)調(diào)用一次,代表頁面已經(jīng)準(zhǔn)備妥當(dāng),可以和視圖層進(jìn)行交互。
b、對界面的設(shè)置如wx.setNavigationBarTitle請?jiān)趏nReady之后設(shè)置。詳見生命周期
4、onHide: 頁面隱藏。
a、當(dāng)navigateTo或底部tab切換時(shí)調(diào)用。
5、onUnload: 頁面卸載。
a、當(dāng)redirectTo或navigateBack的時(shí)候調(diào)用。

示例代碼:

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.'
    })
  },
})

三、應(yīng)用生命周期影響頁面生命周期

1、小程序初始化完成后,頁面首次加載觸發(fā)onLoad,只會(huì)觸發(fā)一次。
2、當(dāng)小程序進(jìn)入到后臺(tái),先執(zhí)行頁面onHide方法再執(zhí)行應(yīng)用onHide方法。
3、當(dāng)小程序從后臺(tái)進(jìn)入到前臺(tái),先執(zhí)行應(yīng)用onShow方法再執(zhí)行頁面onShow方法。

四、路由變化對頁面生命周期的影響

1、在小程序中所有頁面的路由全部由框架進(jìn)行管理,框架以棧的形式維護(hù)當(dāng)前的所有頁面,當(dāng)發(fā)生路由切換的時(shí)候,頁面棧的表現(xiàn)如下:

2、對于路由的觸發(fā)方式以及頁面生命周期函數(shù)如下:

3、Tab 切換對應(yīng)的生命周期(以 A、B 頁面為 Tabbar 頁面,C 是從 A 頁面打開的頁面,D 頁面是從 C 頁面打開的頁面為例):

五、通過實(shí)例我們一起理解一下官方的小程序頁面的生命周期:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容