小程序先提交了一個(gè)版本淫奔,但是用的時(shí)候發(fā)現(xiàn)了一些問(wèn)題需要及時(shí)的更新灶平,這時(shí)候就要發(fā)布新版本蠢护。如何讓用戶(hù)自己的小程序也更新到最新版本呢雅宾?
一、運(yùn)行機(jī)制
小程序啟動(dòng)會(huì)有兩種情況葵硕,一種是「冷啟動(dòng)」眉抬,一種是「熱啟動(dòng)」。
假如用戶(hù)已經(jīng)打開(kāi)過(guò)某小程序懈凹,然后在一定時(shí)間內(nèi)(五分鐘)再次打開(kāi)該小程序蜀变,此時(shí)無(wú)需重新啟動(dòng),只需將后臺(tái)態(tài)的小程序切換到前臺(tái)介评,這個(gè)過(guò)程就是熱啟動(dòng)库北;
冷啟動(dòng)指的是用戶(hù)首次打開(kāi)或小程序被微信主動(dòng)銷(xiāo)毀后再次打開(kāi)的情況,此時(shí)小程序需要重新加載啟動(dòng)们陆。
小程序沒(méi)有重啟的概念
當(dāng)小程序進(jìn)入后臺(tái)寒瓦,客戶(hù)端會(huì)維持一段時(shí)間的運(yùn)行狀態(tài),超過(guò)一定時(shí)間后(目前是5分鐘)會(huì)被微信主動(dòng)銷(xiāo)毀
當(dāng)短時(shí)間內(nèi)(5s)連續(xù)收到兩次以上收到系統(tǒng)內(nèi)存告警棒掠,會(huì)進(jìn)行小程序的銷(xiāo)毀
二孵构、更新機(jī)制
小程序冷啟動(dòng)時(shí)如果發(fā)現(xiàn)有新版本,將會(huì)異步下載新版本的代碼包烟很,并同時(shí)用客戶(hù)端本地的包進(jìn)行啟動(dòng)颈墅,即新版本的小程序需要等下一次冷啟動(dòng)才會(huì)應(yīng)用上。 如果需要馬上應(yīng)用最新版本雾袱,可以使用 wx.getUpdateManager API 進(jìn)行處理恤筛。
三、更新API
wx.getUpdateManager()使用該接口芹橡,可以獲知是否有新版本小程序毒坛、新版本是否下載好以及應(yīng)用新版本的能力。
使用方法:在app.js的onLauch函數(shù),加下面一段代碼即可實(shí)現(xiàn):
onLaunch(){
wx.showLoading({
title: '加載中..',
mask: true
})
//微信小程序用戶(hù)及時(shí)更新到最新版本
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 請(qǐng)求完新版本信息的回調(diào)
console.log('是否有新版本: ', + res.hasUpdate)
if (!res.hasUpdate) {
wx.hideLoading()
}
})
updateManager.onUpdateReady(function () {
wx.hideLoading()
wx.showModal({
title: '更新提示',
content: '新版本已經(jīng)準(zhǔn)備好煎殷,是否重啟應(yīng)用屯伞?',
showCancel: false,
success: function (res) {
if (res.confirm) {
// 新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
wx.hideLoading();
wx.showModal({
title: '提示',
content: '檢查到有新版本豪直,但下載失敗劣摇,請(qǐng)檢查網(wǎng)絡(luò)后重試',
showCancel: false
})
})
setTimeout(wx.hideLoading, 5000)
}
由于onCheckForUpdate在檢查新版本的時(shí)候會(huì)存在一定的延遲(在開(kāi)發(fā)工具上大概4秒左右),為防止在檢查新版本過(guò)程中用戶(hù)觸發(fā)操作跳出首頁(yè)弓乙,添加了一個(gè)wx.showLoading進(jìn)行遮蓋末融。
需要注意,上面的代碼更新到新版本后也是不會(huì)立即生效的暇韧,所以還是需要用戶(hù)進(jìn)行一次冷啟動(dòng)勾习。
參考:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechanism.html