微信小程序运行机制

1. 微信小程序的生命周期

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

小程序生命周期

1.1 微信小程序启动

从用户认知的角度看,广义的微信小程序启动可以分为两种情况,一种是冷启动,一种是热启动

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

从微信小程序生命周期的角度来看,我们一般讲的「启动」专指冷启动,热启动一般被称为后台切前台。

1.2 前台与后台

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

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

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

当用户再次进入微信并打开微信小程序,微信小程序又会重新进入「前台」状态。

1.3 挂起

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

当开发者使用了后台音乐播放、后台地理位置等能力时,微信小程序可以在「后台」持续运行,不会进入到「挂起」状态

1.4 微信小程序销毁

如果用户很久没有使用微信小程序,或者系统资源紧张,微信小程序会被「销毁」,即完全终止运行。具体而言包括以下几种情形:

  • 当微信小程序进入后台并被「挂起」后,如果很长时间(目前是 30 分钟)都未再次进入前台,微信小程序会被销毁。
  • 当微信小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
    • 在 iOS 上,当微信客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁微信小程序,并提示用户 「运行内存不足,请重新打开该微信小程序」。具体策略会持续进行调整优化。
    • 建议微信小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。