支付宝小程序框架 事件·小程序运行机制
下载
小程序无需安装,用户第一次使用小程序时,支付宝 App 会从服务器下载小程序的资源,下载后的小程序资源会缓存在支付宝的客户端一段时间。当用户再次打开已经缓存资源的小程序时,会跳过下载过程,能够更快地打开小程序。
热启动和冷启动
- 冷启动: 当用户打开未启动过,或者是已经销毁的小程序时,称为冷启动。此时小程序会执行初始化,初始化完成后,会触发
onLaunch
回调函数。 - 热启动: 当用户打开已经关闭但仍处于后台运行的小程序时,称为热启动。在这种情况下,小程序并不会被销毁后重启,而仅是从后台切换到前台,此时,
onShow
函数会触发,onLaunch
回调函数不会被触发。
前台 / 后台运行
- 前台运行: 当用户首次打开小程序时候,小程序会处于前台运行状态。
- 后台运行: 用户点击右上角关闭按钮关闭小程序,或者按下设备 Home 键离开支付宝 App 时,小程序并不会直接销毁,而是进入后台运行状态。
- 从后台运行切换为前台运行: 当未被系统销毁的小程序再度被打开或者激活时,会从后台运行切换为前台运行。
可在 app.js 中注册前台 / 后台切换的回调函数。当小程序从后台进入前台显示时会触发 onShow
,当小程序从前台到后台时会触发 onHide
。
缓存
开启本地缓存数据,进行存储、获取和删除等控制。 单个小程序的缓存总上限为 10MB。 同步方法会阻塞当前任务,直到同步方法处理返回。异步方法不会阻塞当前任务。
操作 | 同步 | 异步 | 描述 |
---|---|---|---|
存储 | my.setStorageSync | my.setStorage | 数据存储在本地缓存中指定的 key 中的接口,会覆盖掉原来该 key 对应的数据 |
读取 | my.getStorageSync | my.getStorage | 获取缓存数据的接口 |
清除 | my.clearStorageSync | my.clearStorage | 清除本地数据缓存的接口 |
删除 | my.removeStorageSync | my.removeStorage | 删除缓存数据的接口 |
获取相关信息 | my.getStorageInfoSync | my.getStorageInfo | 获取当前 storage 的相关信息的接口 |
销毁
用户点击右上角关闭按钮关闭小程序时,小程序仅是进入后台运行,不会被销毁。只有当小程序进入后台运行状态一定时间,或者占用系统资源过高时,才会被真正销毁。
常见问题
Q:小程序是否支持 cookie 和 session?
A:小程序不建议使用 cookie,不支持 session。推荐使用小程序缓存。
Q:使用了缓存 API 后,小程序的缓存什么时候会被清掉?
A:使用了缓存 API 必须使用清除 API,否则缓存不会被清除掉。
Q:小程序启动报错Error: EACCES: permission denied, mkdir /Users/xiaoqiang/Tuhu/Gitlab/Ali_ App/Ali_App/dist/.tea
A:权限问题,用超级用户来执行。在npm install 指令前加 sudo 变为: sudo npm install。
Q:打开小程序报错“系统异常,暂时无法启动,请稍后再试”
A:支付宝 APP 版本过低,不支持某些 API 或者组件,会报这样的错误。建议做 兼容 处理。
Q:报错:TypeError:jsarr.push is not a function,怎么解决?
A:不支持发送push消息。推荐使用小程序缓存。
Q:小程序中存入的缓存数据为什么多了一对双引号?
A:告知在调用存入 API 时使用了 JSON.stringify 导致。