微信小程序的【运行机制】解读

news2024/11/13 15:00:39

文章目录

  • 导语
  • 1.微信小程序的运行流程
    • 1.1 微信小程序的启动模式
    • 1.2 前台与后台的概念
    • 1.3 挂起
    • 1.4 微信小程序的销毁
  • 微信小程序冷启动的页面
    • 从新启动策略
  • 3.微信小程序热启动页面
  • 4. 退出状态
  • 注意点补充
  • 总结


在这里插入图片描述

导语

前面我们有章节给大家讲到了,微信小程序的生命周期钩子函数,那么大家知道,这些不同的生命周期函数,是在什么样的操作运行模式下触发的吗?本章节就给大家整理了有关于 微信小程序 的操作运行机制,以便于对后面微信小程序的开发理解。


1.微信小程序的运行流程

微信小程序从启动到最终被销毁,会经历很多不同的状态,小程序在不同状态下会有不同的表现形式。

运行流程图例
在这里插入图片描述

1.1 微信小程序的启动模式

从广泛意义上来说,微信小程序的启动模式可以被分为两种状态,一种是 冷启动 ,另一种为 热启动,那么对于这两种启动模式的区别又是什么呢?

从系统的运行的模式上,可以被区分为以下两种模式:

  • 冷启动:如果用户是首次打开小程序,或者小程序被完全销毁后被用户再次打开,此时的小程序需要重新加载启动,就叫做冷启动
  • 热启动:如果用户已经打开过小程序了,然后在一定时间内再次打开该小程序,此时小程序并未被完全销毁,只是从后台状态进入前台状态,这个过程就是热启动

从小程序的生命周期函数触发的角度来看,我们一般所说的 启动,专指为冷启动,热启动 一般被称为 后台切换为前台。


1.2 前台与后台的概念

小程序启动后,界面被展示出来给用户呈现后,此时小程序处于「前台」状态。

当用户「关闭」小程序时,小程序其实并没有真正被关闭,而是进入了「后台」状态,此时小程序还可以短暂运行一小段时间,但部分 API 的使用会受到限制。切入后台的方式包括但不限于以下几种:

  • 点击右上角胶囊按钮离开小程序
  • iOS 从屏幕左侧右滑离开小程序
  • 安卓点击返回键离开小程序
  • 小程序前台运行时直接把微信切后台(手势或 Home 键)
  • 小程序前台运行时直接锁屏

以上几种的操作触发时,一定时间内,小程序均未完全被退出。当用户再次进入微信并打开小程序,小程序又会重新进入「前台」状态。


1.3 挂起

小程序进入「后台」状态一段时间后(目前是 5 秒),微信会停止对小程序 JS 线程的执行,小程序则会进入「挂起」状态。而此时小程序的内存状态依然会被保留,但开发者代码的执行会停止,事件和接口回调会在小程序再次进入「前台」时触发。

1.4 微信小程序的销毁

当用户长时间未使用小程序时,或者系统资源紧张,小程序会被 完全「销毁」,即完全终止运行。具体而言包括以下几种情形:

  • 当小程序进入后台并被「挂起」后,如果很长时间(目前是 30 分钟)都未再次进入前台,小程序会被销毁。
  • 由于底层系统机制原因,当小程序占用系统资源过高,也可能会被系统销毁或被微信客户端主动回收。

微信小程序冷启动的页面

当微信小程序执行冷启动时,打开的页面有以下情况:

(A 类场景)若启动的场景中不带 指定页面路径:

基础库 2.8.0 以下版本,在冷启动时默认直接进入首页。

基础库 2.8.0 及以上版本遵循「重新启动策略」,可能是首页或上次退出的页面。

(B 类场景)若启动的场景中带有 指定页面路径,则启动会进入对应 指定页面路径的页面。

从新启动策略

当小程序冷启动时,如果启动时不带 path(A 类场景),默认情况下将会进入小程序的首页。 在页面对应的 json 文件中(也可以全局配置在 app.json 的 window 段中),指定 restartStrategy 配置项可以改变这个默认的行为,使得从某个页面退出后,下次 A 类场景的冷启动可以回到这个页面。

在这里插入图片描述
例:

{
  "restartStrategy": "homePage"
}

注意
即使不配置为 homePage ,微信小程序如果退出过久(当前默认一天时间,可以使用退出状态来调整),下次冷启动时也将不再遵循 restartStrategy 的配置,而是直接从首页冷启动

当完全退出时,页面中的状态并不会被保留,如输入框中的文本内容、 checkbox 的勾选状态等都不会还原。如果需要还原或部分还原,需要利用退出状态


3.微信小程序热启动页面

当微信小程序执行 热启动时,打开的页面也有以下情况:

  • (A 类场景)若启动的场景中不带 指定页面路径,则保留上次的浏览的状态
  • (B 类场景)若启动的场景中带有 指定页面路径,则会直接加载到对应 路径的页面

A 类场景有以下一些能被触发的场景
在这里插入图片描述

4. 退出状态

每当微信小程序可能被销毁之前,页面回调函数 onSaveExitState 会被触发。如果想保留页面中的状态,可以在这个回调函数中“保存”一些数据,下次启动时可以从新获得这些已保存数据。

{
  "restartStrategy": "homePageAndLatestPage"
}
Page({
  onLoad() {
    var prevExitState = this.exitState // 尝试获得上一次退出前 onSaveExitState 保存的数据
    if (prevExitState !== undefined) { // 如果是根据 restartStrategy 配置进行的冷启动,就可以获取到
      prevExitState.myDataField === '上一次保存的数据' 
    }
  },
  onSaveExitState() {
    let exitState = { myDataField: '上一次保存的数据' } // 需要保存的数据
    return {
      data: exitState,
      expireTimeStamp: Date.now() + 24 * 60 * 60 * 1000 // 超时时刻
    }
  }
})

onSaveExitState 返回值可以包含两项:
在这里插入图片描述

注意点补充

  • 如果超过 expireTimeStamp 所设置的时间范围 ,那么保存的数据将被丢弃,并且冷启动时不遵循 restartStrategy 的配置,而是直接从首页冷启动
  • expireTimeStamp 有可能被自动提前,如微信客户端需要清理数据的时候
  • 在小程序存活期间, onSaveExitState 可能会被多次调用,此时以最后一次的调用结果作为最终结果。
  • 在某些特殊情况下(如微信客户端直接被系统杀死,或系统出现异常,强制性终止微信客户端运行环境),这个方法将不会被调用,下次冷启动也不遵循 restartStrategy 的配置,而是直接从首页冷启动。

总结

上述内容,是我结合官方文档梳理的内容,讲述了整个微信小程序的运行流程模式,以及在不同的业务操作下,将执行不同的运行机制。


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Socket网络编程练习(C#)

Socket编程:两个窗口通信 本文章代码来自b站视频:【.Net零基础入门 (老赵主讲)-哔哩哔哩】 https://b23.tv/YI5VWaj 原视频发布者为传智播客,本人根据自己的学习进度对代码做了少许优化 一、网络编程前置知识 1.1 什么是网络编程 网络编程…

【Leetcode每日一刷】动态规划:509. 斐波那契数、322. 零钱兑换、300. 最长递增子序列

博主简介:努力学习的22级计科生博主主页: 是瑶瑶子啦所属专栏: LeetCode每日一题–进击大厂 前言:动规五部曲 以下是《代码随想录》作者总结的动规五部曲 确定dp数组(dp table)以及下标的含义确定递推公式&#xff0…

什么是异步,同步,并行,串行,单工,半双工,全双工通信

目录 1 如何理解“BUS总线” 2 通信方式的分类 2.1 串行通信Serial communication 2.1.1 异步传输Asynchronous serial communication 2.1.2 同步传输Synchronous serial communication 2.1.3 单工通信Simplex communication 2.1.4 半双工通信Half-duplex communication…

Unity API详解——Matrix4x4类

在脚本中通常用Vector3、QUaternion、Transform等类的属性和方法来对物体进行变换,Matrix4x4类通常在一些比较特殊的地方,如对摄像机的非标准投影变换等。本博客主要介绍Matrix4x4类的一些实例和静态方法。 文章目录 一、Matrix4x4类实例方法1、Multply…

机器学习实战教程(九):模型泛化

泛化能力 模型泛化是指机器学习模型对新的、未见过的数据的适应能力。在机器学习中,我们通常会将已有的数据集划分为训练集和测试集,使用训练集训练模型,然后使用测试集来评估模型的性能。模型在训练集上表现得好,并不一定能在测…

Redis源码分析(基于Redis7,对比Redis6)

PS: redis7.0.9版本的 1.Redis 源代码分类 1.1Redis 基本的数据结构 基础 Redis对象object.c字符串t_string.c列表t_list.c字典t_hash.c集合及有序集合t_set.c和z_set.c数据流 t_stream 底层实现结构 listpack.c 和 rax.c 简单动态字符串 sds.c整数集合 intset.c压缩列表 z…

【dp】最长递增子序列

文章目录 方法一:动态规划方法二:贪心 二分查找构造最长递增子序列 方法一:动态规划 dp[i]:末尾元素为arr[i]的最长子序列的长度 从0遍历到i - 1,若遍历到的元素小于当前值arr[i],表示当前值arr[i]可以和…

国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义

国考省考行测:词句理解,词的对象指代,就近原则,主语一致法,语意语境分析上下文找出指代含义 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国…

3年100亿!苏宁易购与倍科达成重磅战略合作

紧抓消费复苏机遇,家电行业迎来重磅合作。4月20日,苏宁易购与国际知名家电品牌倍科在南京召开战略合作发布会,共同宣布升级战略合作伙伴关系。双方将围绕3年100亿战略合作目标开展独家品牌授权、发起“BIS”计划、打造生态开放平台、升级用户…

5G基站外市电改造建设方案 (ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 外市电定义及分类 定义:由供电部门提供的专用高压电源或非专用高压电源或低压电源均称为市电。分类: (1)按电压等级分类 ①提供…

贝叶斯学习(Bayesian Learning)基础篇

Bayesian Learning 前言Motivation and IntroductionThink about Spam Filtering.先验概率后验概率似然度边际概率 Basic assumptionRelevancePractical diculties Bayes TheoremProbability: random eventsBayesian Learning Maximum A Posteriori HypothesisBayes Optimal Cl…

合同管理的6个最佳实践

合同管理不善会使你的合同流程效率低下,并产生负面影响: -收入损失 谈判缓慢、审批延迟和里程碑缺失等低效合同代价高昂。如果没有办法自动跟踪最后期限,并得到通知来执行时间敏感的行动,就会有错过最后期限的风险。 -协作和…

数组【有点难,要注重实战】

目录 1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 3. 数组越界4. 数组作为函数参数4.1 冒泡排序函…

JavaEE-一文了解IP协议与IP地址

目录 IP协议什么是IP地址IP地址的组成动态分配IPNAT机制(网络地址转换) IP协议 IP协议是不可靠、无连接的 不可靠:表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务,任何可靠性的要求都必须由上层来提供(如TCP)。如果传输过…

【C++|排序算法】冒泡、快排、归并、堆排序算法模版

目录 简介冒泡排序快速排序归并排序堆排序结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国…

字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

摘要 说在前面,面试时最好不要虚报工资。本来字节跳动是很想去的,几轮面试也通过了,最后没offer,自己只想到几个原因:1、虚报工资,比实际高30%;2、有更好的人选,这个可能性不大&…

反垃圾邮件产品技术要求

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品技术要求 引言 为指导反垃圾邮件产品的研制、生产、测试和评价工作的开展,本标准依据《信息技术 安全技…

基于Spring注解 + MyBatis + Servlet 实现数据库交换的小小Demo

基于Spring注解 MyBatis Servlet 实现数据库交换的小小Demo 第一步 创建web 项目&#xff0c;这一步省略&#xff0c;有不会的可以参考之前发布的文档 第二步 配置pom.xml文件 <dependencies><!-- Spring常用依赖 --><dependency><groupId>org.spr…

SpringCloud --- Eureka注册中心

一、场景 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图 思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c;order-service调用时该…

【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/ 1. 题目介绍&#xff08;67. 把字符串转换成整数&#xff09; 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 …