运行机制
小程序启动有两种情况,一种是「冷启动」,一种是「热启动」
热启动:用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台
冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动
更新机制
小程序冷启动时如果发现有新版本,将会异步下载新版本的代码包,并同时用客户端本地的包进行启动,即新版本的小程序需要等下一次冷启动才能应用
运行机制
小程序没有重启的概念,当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是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 | App({ |
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 | const appInstance = getApp() |