小程序和钉钉发版后老版缓存的问题调研
小程序发版后老版缓存方式
1、 小程序运行机制
(1)小程序启动
小程序启动会有两种情况,一种是冷启动,一种是热启动。
热启动:假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程就是热启动;
冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动,即冷启动。
(2)小程序销毁
需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
A、当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁
B、当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
2、UpdateManager
UpdateManager 对象,用来管理更新,可通过 wx.getUpdateManager 接口获取实例。(从基础库1.9.90才开始支持,也就是微信版本为6.6.1及以上)
强制小程序重启并使用新版本。在小程序新版本下载完成后(即收到 onUpdateReady 回调)调用。
B、UpdateManager.onCheckForUpdate(function callback)
监听向微信后台请求检查更新结果事件。微信在小程序冷启动时自动检查更新,不需由开发者主动触发。
C、UpdateManager.onUpdateReady(function callback)
监听小程序有版本更新事件。客户端主动触发下载(无需开发者触发),下载成功后回调
D、UpdateManager.onUpdateFailed(function callback)
监听小程序更新失败事件。小程序有新版本,客户端主动触发下载(无需开发者触发),下载失败(可能是网络原因等)后回调
代码示例
App({ onLaunch: function(){ const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log(res.hasUpdate) }) updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success: function (res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate() } } }) }) updateManager.onUpdateFailed(function () { // 新版本下载失败 }) } })
钉钉E应用
经过查询资料后获取到的信息:
1、钉钉小程序E应用在发版时会有一个老版本的缓存,每次发版后直接打开E应用,其实访问的是上一个版本的缓存,这个缓存会在发版后10分钟左右自动更新成最新版本,如果想要直接看到最新版本,可以退出钉钉登录账户,并杀掉钉钉进程,这样再进去后就是直接访问的最新版本了.
文档提示自己本地实验:微信开发者工具上可以通过「编译模式」下的「下次编译模拟更新」开关来调试
我自己在本地根据上述的提示实验过,当下次编译时,当本地不是最新版本,会提示“新版本已经准备好,是否重启应用?”,点击确定就触发UpdateManager.applyUpdate()事件,强制小程序重启。