一、小程序運行機制
1. 小程序冷啟動
小程序啟動可以分為兩種情況,一種是冷啟動,一種是熱啟動- 冷啟動:如果用戶首次打開,或小程序銷毀后被用戶再次打開,此時小程序需要重新加載啟動- 熱啟動:如果用戶已經打開過某小程序,然后再一定時間內再次打開該小程序,此時小程序并未被銷毀,只是從后臺狀態進入前臺狀態
2. 前臺和后臺狀態
小程序啟動后,界面被展示給用戶,此時小程序處于【前臺】狀態。
當用戶【關閉】小程序時(通過以下圖片形式 ),并沒有真正被關閉,而是進入了【后臺】狀態,
當用戶再次進入微信并打開小程序,小程序優惠重新進入【前臺】狀態
3. 切前臺和切后臺
小程序啟動后,界面被展示給用戶,此時小程序處于【前臺】狀態。
當用戶【關閉】小程序時,小程序并沒有真正被關閉,而是進入了【后臺】狀態,當用戶再次進入微信并打開
小程序,小程序又會重新進入【前臺】狀態
4. 掛起
小程序進入【后臺】狀態一段時間后(5秒),微信停止小程序JS線程執行,小程序進入【掛起】狀態,
當開發者使用了后臺播放音樂、后臺地理位置等能力時,小程序可以再后臺持續運行,不會進入到掛起狀態
5. 銷毀
如果用戶很久沒有使用小程序,或者系統資源緊張,小程序會被銷毀,即完全終止運行。
當小程序進入后臺并被【掛起】后,如果很長時間(目前時30分鐘)都未再次進入前臺,小程序會被銷毀
當小程序占用系統資源過高,可能會被系統銷毀或被微信客戶端主動回收。
二、小程序更新機制
在訪問小程序時,微信會將小程序代碼包緩存到本地。開發者在發布了新的小程序版本后,微信客戶端會檢查本地緩存的小程序有沒有新版本,并進行小程序代碼包的更新。小程序的更新機制有兩種:啟動時同步更新和啟動時異步更新。
1. 啟動時同步更新
微信運行時,會定期檢查最近使用的小程序是否有更新,如果有更新,下次小程序啟動時會同步進行更新,更新到最新版本后再次打開小程序,如果用戶長時間未使用小程序時,會強制同步檢查版本更新。
2. 啟動時異步更新
在啟動前沒有發現更新,小程序每次 冷啟動 時,都會異步檢查是否有更新版本。如果發現有新
版本,將會異步下載新版本的代碼包,將新版本的小程序在下一次冷啟動進行使用,當前訪問
使用的依然時本地的舊版本代碼
3. 在啟動異步更新的情況下,如果開發者希望立即進行版本更新,可以使用 wx.getUpdateManager API 進行處理。在有新版本時提示用戶啟動小程序更新版本。
// app.js
App({// 小程序的鉤子函數,這個鉤子函數在冷啟動時會執行到// 當小程序冷啟動時,會自動向微信后臺請求新版本的信息,如果有新版本,會立即進行下載onLaunch(){// 使用 wx.getUpdateManager 方法監聽下載的狀態const updataManager=wx.getUpdateManager()// 當下載完成新版本以后,會觸發 onUpdateReady 回調函數updataManager.onUpdateReady(function(){// 在回調函數中給用戶提示wx.showModal({title: '更新提示',content: '新版本已經準備好,是否重新啟用',success(res){if (res.confirm) {// 強制當前小程序使用新版本并且會重啟當前小程序updataManager.applyUpdate()}}})})}
})
三、小程序生命周期
1. 小程序生命周期介紹
應用生命周期是指應用程序進程從創建到消亡的整個過程
小程序的生命周期指的是 小程序從啟動到銷毀的整個過程。
一個小程序完整的生命周期由 應用生命周期、頁面生命周期和組件生命周期 三部分來組成。
小程序生命周期伴隨著一些函數,這些函數由小程序框架本身提供,被稱為生命周期函數,生命周期函數會
按照順序一次自動觸發調用。
幫助程序員在特定的時機執行特定的操作,輔助程序員完成一些比較復雜的邏輯。
2. 應用生命周期
應用生命周期通常是指一個程序從 啟動--->運行--->銷毀的整個過程
應用生命周期伴隨著一些函數,我們稱為 應用生命周期函數,應用生命周期函數需要 在 app.js文件的App()
方法中進行定義,App()方法必須在app.js中進行調用,主要用來注冊小程序。
應用生命周期函數由 onLaunch 、onShow、onHide 三個函數組成。
3. 頁面生命周期
頁面生命周期就是小程序頁面從加載--->運行--->銷毀的整個過程
頁面生命周期函數需要在Page()方法進行定義
注意:onLoad 和哦那Ready函數一個頁面只會調用一次
Page({onLoad: function (options) {console.log('onLoad 頁面創建的時候執行')},onReady: function () {console.log('onReady 頁面初次渲染完成時觸發,代表頁面已經準備妥當,可以和視圖層進行交互')},onShow: function () {console.log('onShow 頁面在前臺展示的時候')},onHide: function () {console.log('onHide 當前頁面頁面隱藏')},onUnload: function () {console.log('onUnload 當前頁面頁面被銷毀時觸發')}
})
4.生命周期兩個細節
- tabBar 頁面之間相互切換,頁面不會被銷毀
- 點擊左上角,返回上一個頁面,會銷毀當前頁面