- 小程序重启流程是如何执行的?
先描述一遍场景: 打开小程序进入二级页面 A关闭小程序(直接点击右上角胶囊按钮)点击别人分享的该小程序消息,小程序被打开并进入 页面 A可以看到的现象(安卓):关于第3点应该只是暂时放在后台运行,并没有真的被杀掉。第4点执行时,原来在后台运行会完整执行一遍生命周期(onUnload, onHide),重新打开的小程序也会完整执行一遍初始化过程。我其中的疑点为: relaunch 的小程序是否会先进行销毁,然后新初始化一个小程序?前后两个小程序逻辑层是否共用同一个上下文?前一个销毁和下一个的初始化是否为同步执行,即是否是前一个销毁完后新的才开始初始化?以上两点在各个平台是否存在差异? 以上疑问对我在开发过程遇到的问题可能是十分关键的,我将简短的对相关问题进行描述: 问题一:App 初始化时建立 WebSocket 连接,并将 WS 消息存在全局变量 BUCKET 中,而在页面 A 的 onUnload 事件会进行重置,当发生以上场景时我发现:新启动的小程序 WS 收到消息并存在 BUCKET 中,但此时发生了页面 A 的 onUnload 事件 BUCKET 被重置,导致收到的消息丢失了。 问题二:还是同一个场景,同时我们建立 WebSocket 连接时使用同一个 ID 进行登录,保证同一个用户只能建立一个 WS 连接,并且会在 WS 断开时判断为登出状态。当发生以上场景时,新启动的小程序 WS 未收到新消息(等待一会后 WS 连接才会变得正常),虽然我推测可能是后端对于登出的实现存在问题,但仍然需要考虑小程序这边的问题:如果重启后不是同一个 JS 上下文就意味着 WS 发生了重连,而前一次 WS 断开和后一次 WS 连接的登录和登出流程就有可能不符合预期。
2023-04-27 - 小程序 JS 环境为什么不支持 Error.cause 属性?
[图片]
2023-03-20