美文网首页
梳理小程序知识(四)

梳理小程序知识(四)

作者: chulijun | 来源:发表于2019-08-22 14:59 被阅读0次

小程序运行机制

前台/后台状态

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

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

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

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

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

小程序销毁时机

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

  • 当小程序进入后台,可以会维持一小段时间的运行状态,如果这段时间内都未进入前台,小程序会被销毁。
  • 当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
    • 在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次及以上系统内存告警时,会主动进行小程序的销毁,并提示用户 「该小程序可能导致微信响应变慢被终止」。
    • 建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
      基础库 1.1.0 及以上,1.4.0 以下版本: 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,且没有置顶小程序的情况下退出,小程序会被销毁。
[图片上传中...(屏幕快照 2019-08-22 下午2.55.03.png-9559f2-1566456960178-0)]

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

注意事项:
如果超过 expireTimeStamp ,保存的数据将被丢弃,且冷启动时不遵循 restartStrategy 的配置,而是直接从首页冷启动。
expireTimeStamp 有可能被自动提前,如微信客户端需要清理数据的时候。
在小程序存活期间, onSaveExitState 可能会被多次调用,此时以最后一次的调用结果作为最终结果。
在某些特殊情况下(如微信客户端直接被系统杀死),这个方法将不会被调用,下次冷启动也不遵循 restartStrategy 的配置,而是直接从首页冷启动。

相关文章

  • 梳理小程序知识(四)

    小程序运行机制 前台/后台状态 小程序启动后,界面被展示给用户,此时小程序处于前台状态。 当用户点击右上角胶囊按钮...

  • 梳理小程序知识(三)

    事件的捕获阶段 自基础库版本 1.5.0 起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事...

  • 梳理小程序知识(七)

    使用插件 添加插件 在使用插件前,首先要在小程序管理后台的“设置-第三方服务-插件管理”中添加插件。开发者可登录小...

  • 梳理小程序知识(一)

    最近比较空闲,想着把之前学习小程序的知识点 和遇到的问题梳理一下,作为备份,也作为分享给大家学习小程序的一个资料。...

  • 梳理小程序知识(二)

    注册账号:...https://mp.weixin.qq.com/wxopen/waregister?action...

  • 梳理小程序知识(六)

    插件从小程序基础库版本 2.1.0 开始支持页面。插件可以定义若干个插件页面,可以从本插件的自定义组件、其他页面中...

  • 梳理小程序知识(五)

    关于小程序的更新机制 未启动时更新 开发者在管理后台发布新版本的小程序之后,如果某个用户本地有小程序的历史版本,此...

  • 今日学习晚总结

    复习: 专题三知识画图梳理 专题四知识画图梳理 1.参照专题讲义,梳理清楚整个破产程序的流程; 2.梳理清楚重整程...

  • 梳理小程序知识(八)-网络

    网络 1. 服务器域名配置 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名与进行网络通信。包括普通 ...

  • 梳理小程序知识(九)-优化

    setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。在介绍常见的错误用法...

网友评论

      本文标题:梳理小程序知识(四)

      本文链接:https://www.haomeiwen.com/subject/unpnsctx.html