小程序的运行机制、更新机制、生命周期介绍保姆级教程全解

一、小程序运行机制

在这里插入图片描述

1. 小程序冷启动

	小程序启动可以分为两种情况,一种是冷启动,一种是热启动- 冷启动:如果用户首次打开,或小程序销毁后被用户再次打开,此时小程序需要重新加载启动- 热启动:如果用户已经打开过某小程序,然后再一定时间内再次打开该小程序,此时小程序并未被销毁,只是从后台状态进入前台状态

2. 前台和后台状态

小程序启动后,界面被展示给用户,此时小程序处于【前台】状态。
当用户【关闭】小程序时(通过以下图片形式 ),并没有真正被关闭,而是进入了【后台】状态,
当用户再次进入微信并打开小程序,小程序优惠重新进入【前台】状态

在这里插入图片描述

3. 切前台和切后台

小程序启动后,界面被展示给用户,此时小程序处于【前台】状态。
当用户【关闭】小程序时,小程序并没有真正被关闭,而是进入了【后台】状态,当用户再次进入微信并打开
小程序,小程序又会重新进入【前台】状态

4. 挂起

小程序进入【后台】状态一段时间后(5秒),微信停止小程序JS线程执行,小程序进入【挂起】状态,
当开发者使用了后台播放音乐、后台地理位置等能力时,小程序可以再后台持续运行,不会进入到挂起状态

5. 销毁

如果用户很久没有使用小程序,或者系统资源紧张,小程序会被销毁,即完全终止运行。
当小程序进入后台并被【挂起】后,如果很长时间(目前时30分钟)都未再次进入前台,小程序会被销毁
当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。

二、小程序更新机制

	在访问小程序时,微信会将小程序代码包缓存到本地。开发者在发布了新的小程序版本后,微信客户端会检查本地缓存的小程序有没有新版本,并进行小程序代码包的更新。小程序的更新机制有两种:启动时同步更新和启动时异步更新。

1. 启动时同步更新

	微信运行时,会定期检查最近使用的小程序是否有更新,如果有更新,下次小程序启动时会同步进行更新,更新到最新版本后再次打开小程序,如果用户长时间未使用小程序时,会强制同步检查版本更新。

2. 启动时异步更新

在启动前没有发现更新,小程序每次 冷启动 时,都会异步检查是否有更新版本。如果发现有新
版本,将会异步下载新版本的代码包,将新版本的小程序在下一次冷启动进行使用,当前访问
使用的依然时本地的旧版本代码

3. 在启动异步更新的情况下,如果开发者希望立即进行版本更新,可以使用 wx.getUpdateManager API 进行处理。在有新版本时提示用户启动小程序更新版本。

// app.js
App({// 小程序的钩子函数,这个钩子函数在冷启动时会执行到// 当小程序冷启动时,会自动向微信后台请求新版本的信息,如果有新版本,会立即进行下载onLaunch(){// 使用 wx.getUpdateManager 方法监听下载的状态const updataManager=wx.getUpdateManager()// 当下载完成新版本以后,会触发 onUpdateReady 回调函数updataManager.onUpdateReady(function(){// 在回调函数中给用户提示wx.showModal({title: '更新提示',content: '新版本已经准备好,是否重新启用',success(res){if (res.confirm) {// 强制当前小程序使用新版本并且会重启当前小程序updataManager.applyUpdate()}}})})}
})

三、小程序生命周期

1. 小程序生命周期介绍

应用生命周期是指应用程序进程从创建到消亡的整个过程
小程序的生命周期指的是 小程序从启动到销毁的整个过程。
一个小程序完整的生命周期由 应用生命周期、页面生命周期和组件生命周期 三部分来组成。
小程序生命周期伴随着一些函数,这些函数由小程序框架本身提供,被称为生命周期函数,生命周期函数会
按照顺序一次自动触发调用。
帮助程序员在特定的时机执行特定的操作,辅助程序员完成一些比较复杂的逻辑。

2. 应用生命周期

应用生命周期通常是指一个程序从 启动--->运行--->销毁的整个过程
应用生命周期伴随着一些函数,我们称为 应用生命周期函数,应用生命周期函数需要 在 app.js文件的App()
方法中进行定义,App()方法必须在app.js中进行调用,主要用来注册小程序。
应用生命周期函数由 onLaunch 、onShow、onHide 三个函数组成。

在这里插入图片描述

3. 页面生命周期

页面生命周期就是小程序页面从加载--->运行--->销毁的整个过程
页面生命周期函数需要在Page()方法进行定义

在这里插入图片描述
注意:onLoad 和哦那Ready函数一个页面只会调用一次

Page({onLoad: function (options) {console.log('onLoad 页面创建的时候执行')},onReady: function () {console.log('onReady 页面初次渲染完成时触发,代表页面已经准备妥当,可以和视图层进行交互')},onShow: function () {console.log('onShow 页面在前台展示的时候')},onHide: function () {console.log('onHide 当前页面页面隐藏')},onUnload: function () {console.log('onUnload 当前页面页面被销毁时触发')}
})

4.生命周期两个细节

  • tabBar 页面之间相互切换,页面不会被销毁
  • 点击左上角,返回上一个页面,会销毁当前页面
    在这里插入图片描述

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

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

相关文章

HSP_12章 Python面向对象编程oop_多态

文章目录 P128 多态问题的引出P129 多态细节和使用1. 多态介绍&特别说明2. 多态的好处3. 特别说明: Python多态的特点4. 使用多态的机制来解决主人喂食物的问题 P128 多态问题的引出 先看一个问题 # 说明: 先试用传统的方式完成 class Food:name Nonedef __init__(self,…

4.Android逆向协议-详解二次打包失败解决方案

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:微尘网校 上一个内容:3.Android逆向协议-APP反反编译及回编译 工具下载: 链接:https://pan.baidu.…

#笔记# 写给自己用的小爬虫

最近完成了一个文旅行业信息聚合的小应用,实现仅从一个入口了解全行业的信息动态,不用一个一个翻看各网站,节省了不少检索时间。 一、基本思路 明确数据来源。基于前述目标,确定数据源为文化和旅游部管理部门官网,比…

【办公类-21-18】20240701 养老护理员初级选择题488,制作PyQt5图形界面GUI

背景需求: 6月16日育婴师高级考完了。运气好,抽到的是”护理患腹泻的幼儿”,“晨检与家长沟通”,“4个月婴儿喂蛋黄”,“21个月食谱”,都是我背过的题目(没有抽到感统) 于是一放假&…

【C语言】解决C语言报错:Invalid Pointer

文章目录 简介什么是Invalid PointerInvalid Pointer的常见原因如何检测和调试Invalid Pointer解决Invalid Pointer的最佳实践详细实例解析示例1:未初始化的指针示例2:已释放的指针示例3:返回局部变量的指针示例4:野指针 进一步阅…

《化学工程与装备》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《化学工程与装备》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《化学工程与装备》级别? 答:省级。主管单位:福建石油化工集团有限责任公司 …

昇思25天学习打卡营第6天|网络构建

网络构建 概念模型模型参数 概念 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类,也是网络的基本单元。一个神经网络模型表示为一个Cell&…

技术革新:如何用数据中台实现数字化转型

作为程序员,我们总是对技术如何改变企业运作充满好奇。今天,我们将深入探讨森马集团如何利用数据中台技术,实现从传统数据分析到数字化转型的华丽转身。 1. 技术背景:森马集团的数字化挑战 森马集团,一个在服饰行业占…

天津惠灵顿:从心,致逐梦康桥|在这所天津国际学校从容不迫中走近梦想

在刚刚落下帷幕的申请季中,来自惠灵顿天津校区的Herman,陆续收到了剑桥大学、帝国理工学院、纽约大学、瓦萨学院等10余封录取通知书。面对纷至沓来的名校肯定,经历了短暂的尘埃落定的喜悦,Herman很快恢复了往日里的泰然自若。在他…

chunkers/maxent_ne_chunker/english_ace_multiclass.pickle 找不到

首先在这个nltk_data : NLTK Data官方下的数据集,找不到english_ace_multiclass.pic 说明缺少这个文件 : 那么在 nlp/resources/chunkers/maxent_ne_chunker/english_ace_multiclass.pickle at master teropa/nlp (github.com) 下载那两个文件 : 然…

基于SpringBoot的CSGO赛事管理系统

您好!我是专注于计算机技术研究的码农小野。如果您对CSGO赛事管理系统感兴趣或有相关开发需求,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架,Java技术 工具:Eclipse&a…

迈阿密色主题学科 HTML5静态导航源码

源码介绍 迈阿密色主题学科 HTML5静态导航源码,源码直接上传可用,有技术的可以拿去写个后端搜索调用百度接口,也可用于做引导页下面加你网址添加一个A标签就行了,很简单,需要的朋友就拿去吧 界面预览 源码下载 迈阿…

专题五:Spring源码之初始化容器上下文

上一篇我们通过如下一段基础代码作为切入点,最终找到核心的处理是refresh方法,从今天开始正式进入refresh方法的解读。 public class Main {public static void main(String[] args) {ApplicationContext context new ClassPathXmlApplicationContext(…

鸿蒙本地签名不匹配问题

连接鸿蒙手机运行项目报如下错误 这是由于本地签名和鸿蒙设备签名不匹配导致的,需要注释掉如下代码,选择file project 自动签名 勾选auto选项,会在build-profile.json5中生成一个签名,然后运行就ok了~

创建一个Django用户认证系统

目录 1、Django2、Django用户认证系统User 模型:Authentication 视图:认证后端 (Authentication Backends):Form 类:中间件 (Middleware):权限和组 (Permissions and Groups): 3、创建一个django用户认证系…

MNIST手写字体识别(算法基础)

快教程 10分钟入门神经网络 PyTorch 手写数字识别 慢教程 【深度学习Pytorch入门】 简单回归问题-1 梯度下降算法 梯度下降算法 l o s s x 2 ∗ s i n ( x ) loss x^2 * sin(x) lossx2∗sin(x) 求导得: f ‘ ( x ) 2 x s i n x x 2 c o s x f^(x)2xsinx x^…

Cesium大屏-vue3注册全局组件

1.需求 说明:产品经理要求开发人员在地图大屏上面随意放置组件,并且需要通过数据库更改其组件大小,位置等;适用于大屏组件中场站视角、任意位置标题等。 2.实现 2.1GlobalComponents.vue 说明:containerList可以通…

python基础语法 004-2流程控制- for遍历

1 遍历 1.1 什么是遍历? 可以遍历的元素:字符串、列表、元组、字典、集合字符串是可以进行for 循环。(容器对象,序列)可迭代对象iterable 例子: 1 )、for遍历字符串: name xiao…

RK3568驱动指南|第十五篇 I2C-第167章 I2C上拉电阻

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

SpringBoot实现图片添加水印

提示&#xff1a;今日完成图片添加水印功能 后续可能还会继续完善这个功能 文章目录 目录 文章目录 前端部分 后端 Xml Controller层 Sercive层 Service实现层 Config配置层 application.properties 文件后缀名获取 常量定义 前端部分 <!DOCTYPE html> <htm…