小程序运行机制和注册

运行机制

小程序启动有两种情况,一种是「冷启动」,一种是「热启动」

热启动:用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台

冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动

更新机制

小程序冷启动时如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才能应用

运行机制

小程序没有重启的概念,当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)会被微信主动销毁;另外,当短时间内(5s)连续收到两次以上收到系统内存告警也会销毁小程序

再次打开逻辑

用户打开小程序的预期有以下两类场景:

  • 打开首页 A: 场景值有 1001, 1019, 1022, 1023, 1038, 1056
  • 打开小程序指定的某个页面 B: 场景值为除 A 以外的其他

当再次打开一个小程序逻辑如下:

上一次场景 当前打开场景 效果
A A 保留原状态
B A 清空原来的页面栈,打开首页(相当于执行 wx.reLaunch 到首页)
A / B B 清空原来的页面栈,打开指定页面(相当于执行 wx.reLaunch 到指定页)

注册

通过 app() 函数来注册小程序,该函数接受 Object 对象,用于指定小程序的生命周期函数等

App() 必须在 app.js 中注册,且不能注册多个

不要在定义于 App() 内的函数中调用 getApp() ,使用 this 就可以拿到 app 实例

不要在 onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成

通过 getApp() 获取实例之后,不要私自调用生命周期函数

由于 Android 系统限制,目前还无法获取到按 Home 键退出到桌面,然后从桌面再次进小程序的场景值,对于这种情况,会保留上一次的场景值

前台、后台定义:用户点击左上角关闭,或按 Home 键离开微信时,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台;只有当小程序进入后台一定时间(目前是 5 分钟),或者系统资源占用过高,才会被真正的销毁

属性 类型 描述 触发时机
onLaunch Function 小程序初始化 小程序初始化完成时触发(全局只触发一次)
onShow Function 小程序显示 小程序启动或从后台进入前台显示时触发
onHide Function 小程序隐藏 小程序从前台进入后台时触发
onError Function 错误监听函数 小程序发生脚本错误或调用 api 失败时触发
其他 Any 可以添加任意函数或数据到 Object 中,并通过 this 访问
1
2
3
4
5
6
7
App({
onLaunch: (options) => {},
onShow: (options) => {},
onHide: () => {},
onError: (msg) => {},
globalData: 'I am global data'
})

onLaunch, onShow 参数

具体的场景值,详见

字段 类型 说明
path String 打开小程序路径
query Object 打开小程序的查询参数
scene Number 打开小程序的场景值
shareTicket String shareTicket
referrerInfo Object 当场景为由从另一个小程序或公众号或App打开时,返回此字段
referrerInfo.appId String 来源小程序或公众号或 App 的 appId
referrerInfo.extraData Object 来源小程序传过来的数据,scene=1037或1038时支持

getApp()

通过 getApp() 函数可以获取小程序实例

1
2
const appInstance = getApp()
console.log(appInstance.globalData);