小程序多次扫描不同二维码参数不生效问题(小程序的热启动和冷启动)

一.小程序的运行机制

        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})
		}
    }


 

猜你喜欢

转载自blog.csdn.net/peachban/article/details/134239149