字节跳动小程序 微信小程序 抖音操作指导 短视频软件教程 短视频制作技巧 抖音资讯
抖音视频| 小程序| 微信小程序| 微信小程序手册|

微信小程序 运行机制

小程序运行机制

前台/后台状态

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

当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有完全终止运行,而是进入了后台状态,小程序还可以运行一小段时间。

当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。但如果用户很久没有再进入小程序,或者系统资源紧张,小程序可能被销毁,即完全终止运行。

小程序启动

这样,小程序启动可以分为两种情况,一种是冷启动,一种是热启动。

小程序销毁时机

通常,只有当小程序进入后台一定时间,或者系统资源占用过高,才会被销毁。具体而言包括以下几种情形:

基础库 1.1.0 及以上,1.4.0 以下版本: 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。

启动场景分类

用户打开小程序时,场景可分为以下 A、B 两类:

A. 保留上次的浏览状态。场景值有以下几项:

场景值ID 说明
1001 发现栏小程序主入口,「最近使用」列表(基础库2.2.4版本起包含「我的小程序」列表)
1003 星标小程序列表
1023 系统桌面小图标打开小程序
1038 从其他小程序返回小程序
1056 聊天顶部音乐播放器右上角菜单,打开小程序
1080 客服会话菜单小程序入口,打开小程序
1083 公众号会话菜单小程序入口 ,打开小程序(只有腾讯客服小程序有)
1089 聊天主界面下拉,打开小程序/微信聊天主界面下拉,「最近使用」栏(基础库2.2.4版本起包含「我的小程序」栏)
1090 长按小程序右上角菜单,打开小程序
1103 发现-小程序主入口我的小程序,打开小程序
1104 聊天主界面下拉,从我的小程序,打开小程序
1113 安卓手机负一屏,打开小程序
1114 安卓手机侧边栏,打开小程序
1117 后台运行小程序的管理页中,打开小程序

B. relaunch 到指定页或首页

包括除 A 类外的其他场景

A 类场景的重新启动策略

基础库 2.8.0 开始支持,低版本需做兼容处理

小程序被销毁后,下次冷启动如果属于 B 类场景,将会进入特定的页面。

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

代码示例:

{
  "restartStrategy": "homePage"
}

restartStrategy 可选值:

可选值 含义
homePage (默认值)如果从这个页面退出小程序,下次将从首页冷启动
homePageAndLatestPage 如果从这个页面退出小程序,下次冷启动后立刻加载这个页面,页面的参数保持不变(不可用于 tab 页)

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

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

退出状态

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

代码示例:

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

onSaveExitState 返回值可以包含两项:

字段名 类型 含义
data Any 需要保存的数据(只能是 JSON 兼容的数据)
expireTimeStamp Number 超时时刻,在这个时刻后,保存的数据保证一定被丢弃,默认为 (当前时刻 + 1 天)


注意事项:


Copyright © 360度搜索建站网. All Rights Reserved.

360度搜索建站网版权所有@588wlk.cn

手机扫描浏览手机网站

精品