一.小程序的运行机制
1. 小程序的生命周期
小程序从启动到最终被销毁,会经历很多不同的状态,小程序在不同状态下会有不同的表现。
1.1 小程序启动
从用户认知的角度看,广义的小程序启动可以分为两种情况,一种是冷启动,一种是热启动。
- 冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动,即冷启动。
- 热启动:如果用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态,这个过程就是热启动。
从小程序生命周期的角度来看,我们一般讲的「启动」专指冷启动,热启动一般被称为后台切前台。
1.2 前台与后台
小程序启动后,界面被展示给用户,此时小程序处于「前台」状态。
当用户「关闭」小程序时,小程序并没有真正被关闭,而是进入了「后台」状态,此时小程序还可以短暂运行一小段时间,但部分 API 的使用会受到限制。切后台的方式包括但不限于以下几种:
- 点击右上角胶囊按钮离开小程序。
- iOS 从屏幕左侧右滑离开小程序。
- 安卓点击返回键离开小程序。
- 小程序前台运行时直接把微信切后台(手势或 Home 键)。
- 小程序前台运行时直接锁屏。
当用户再次进入微信并打开小程序,小程序又会重新进入「前台」状态。
2. 小程序冷启动的页面
小程序冷启动时,打开的页面有以下情况:
- (A 类场景)若启动的场景中不带 path:
- 基础库 2.8.0 以下版本,进入首页。
- 基础库 2.8.0 及以上版本遵循「重新启动策略」,可能是首页或上次退出的页面。
- (B 类场景)若启动的场景中带有 path,则启动进入对应 path 的页面。
3. 小程序热启动的页面
小程序热启动时,打开的页面有以下情况:
- (A 类场景)若启动的场景中不带 path,则保留上次的浏览的状态。
- (B 类场景)若启动的场景中带有 path,则 reLaunch 到对应 path 的页面。
二.小程序多次扫描不同二维码参数不生效
有时候小程序开发免不了有功能是扫描二维码,二维码带参数进入小程序的指定页面的需求。而多次扫描二维码进入的时候,有时候会出现携带参数出现问题的情况。
冷启动的时候机会触发我们的onlauch,热启动触发的是onshow
获取小程序启动参数有两个方法:
1. wx.getLaunchOptionsSync()
获取小程序启动时的参数。与 App.onLaunch 的回调参数一致。
只能获取冷启动参数,不能获取热启动页面参数。
2. wx.getEnterOptionsSync()
获取本次小程序启动时的参数。如果当前是冷启动,则返回值与 App.onLaunch 的回调参数一致;如果当前是热启动,则返回值与 App.onShow 一致。
三.实际操作
在onLoad和onShow里都获取参数。
onLoad: function (options) {
this.setData({options:options})
console.log('onLoad',this.data.options)
}
onShow() {
const launchOptions = wx.getLaunchOptionsSync();
if(Object.keys(launchOptions.query).length !== 0){
this.setData({options:launchOptions.query})
}
}