这是 Android 系统的标准行为,不是引擎 bug。App 切到后台后,Android 的 Doze 模式和省电策略会限制后台网络活动,大约 1 分钟后系统会关闭空闲的网络连接,导致 WebSocket 收到 LWS_CALLBACK_DEL_POLL_FD 和 LWS_CALLBACK_CLOSED 回调而断开(就是你日志里看到的 error 33 和 closing 4)。
Native 运行时在 onPause 时只暂停了渲染循环,WebSocket 线程还在跑,但系统层面已经不让它正常通信了。
解决方案是在游戏逻辑里做断线重连:监听 visibilitychange 事件,App 回到前台时检测连接状态,断了就重连。比如:
document.addEventListener("visibilitychange", () => {
if (!document.hidden) {
// 回到前台,检查 socket 状态,断开则重连
if (socket.readyState !== WebSocket.OPEN) {
reconnect();
}
}
});
另外如果你的服务端有心跳机制,可以适当调大心跳超时时间,避免后台期间因心跳丢失被服务端主动踢掉。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。