小程序启动后,此时小程序处于打开状态,用户关闭小程序或离开微信,在短时间内小程序并不会被销毁,此时小程序处于后台状态,这个时候如果用户再次进入到小程序,就是从后台状态切换到前台状态,此时小程序是热启动。
但如果用户过了很久都没有再进入小程序,那么这个时候小程序可能被销毁,等用户再次打开这个小程序,此时小程序需要重新加载启动,即冷启动。
如果用户是首次打开小程序,小程序也需要重新加载启动,那么这种情况也属于冷启动
冷启动:冷启动的小程序,会先执行app.js
中的onLaunch
和onShow
,然后才是页面的生命周期:onLoad
,onShow
,onReady
…
热启动:热启动的小程序,会先执行app.js
中的onShow
,然后执行页面的生命周期:onShow
更新机制
在发布新版本之后,如果本地有历史版本,此时打开的可能还是旧版本。微信客户端会有若干个时机去检查本地缓存的小程序有没有更新版本,如果有则会静默更新到新版本。开发者在后台发布新版本之后,无法立刻影响到所有现网用户,但最差情况下,也在发布之后 24 小时之内下发新版本信息到用户,用户下次打开时会先更新最新版本再打开。
小程序每次冷启动时,都会检查是否有更新版本,如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动。即新版本的小程序需要等下一次冷启动才会应用上。如果需要马上应用最新版本,可以使用wx.getUpdateManager
进行处理。
wx.getUpdateManager
- wx.getUpdateManager(): 获取全局唯一的版本更新管理器,用于管理小程序更新,返回值是UpdateManager对象。
- UpdateManager.onCheckForUpdate():监听向微信后台请求检查更新结果事件。微信在小程序冷启动时自动检查更新,不需由开发者主动触发。返回值是个布尔值hasUpdate。
- UpdateManager.onUpdateReady():监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调。
- UpdateManager.applyUpdate():强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到onUpdateReady回调)调用。
- UpdateManager.onUpdateFailed():监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调。
// app.js
onLaunch: function () {
this.checkForUpdate();
},
// 检查是否有新版本
checkForUpdate: function () {
if (wx.canIUse('getUpdateManager')) { // 判断getUpdateManager在当前版本是否可用
const updateManager = wx.getUpdateManager();
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
if (res.hasUpdate) { // 有新版本
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate();
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
wx.showModal({
title: '已经有新版本了哟~',
content: '新版本已经上线,请您删除当前小程序,重新搜索打开哟~'
})
})
}
})
} else {
wx.showModal({
title: '提示',
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}
}