한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L2 客户端操作系统与设备

移动应用切到后台 App suspended in background

原因 ID co-mobile-bg · 主责 研发团队·客户端开发 · 配合 研发团队·服务器开发

在含图示和实验的完整版中打开此卡片 →

为了看通知把应用暂时切到后台,几秒后系统就会挂起(suspend)应用,这期间服务器就会断开这个玩家的连接。

起因 因看消息、接电话把游戏切到后台 → 结果 游戏引擎暂停游戏运行,系统随后也会挂起应用和网络 → 画面表现 切回来时已经掉线,需要重连

症状
掉线
因素
停顿, 丢包
谁会遇到
只有我
何时出现
挂机一段时间后, 做特定操作时
负责方
主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
研发团队要做的事
客户端:切回来时不要等已断开的连接,直接用会话令牌自动重连(无需重新登录即可接上),一次性拉取最新状态对齐。服务器:心跳中断时清理连接,但在短暂的宽限期内保留角色会话(不要立即踢出),期间重连就用会话令牌接续。
数值参考
游戏引擎通常在切出的那一刻就暂停。iOS 几秒后会挂起应用,即使申请了额外时间,一般也在几十秒内挂起;Android 14 及以上会在应用离开屏幕约 10 秒后将其冻结(freeze)。
监控图上
连接成批断开 · 掉线次数(心跳超时)、应用挂起记录
查看位置
用会话 ID 把客户端日志中的应用挂起、恢复时刻(Unity 为 OnApplicationPause)与服务器的断线原因、时刻对上。Android 还要一并查看 ApplicationExitInfo 中记录的进程退出原因(REASON_LOW_MEMORY 等)
确认依据
服务器因心跳超时断开连接之前,客户端刚刚进入挂起状态,恢复后立即重连
排除依据
应用在前台时掉线,看“NAT 映射过期”“运营商共享 IP(CGNAT)”“Wi-Fi ↔ 4G/5G 切换”
确认手段
需要游戏服务器/客户端的日志和指标
深入了解
手机内存不够时,有时会直接结束切到后台的游戏。这就是从相机或支付、认证应用切回来后,游戏要从头启动的原因。配置越低的设备越常见。

出处

  1. Extending your app’s background execution time Apple
    切到后台后 applicationDidEnterBackground 有 5 秒时间,随后很快挂起;需要更多时间时用 beginBackgroundTask 申请(剩余时间看 backgroundTimeRemaining)
  2. Cached apps freezer Android (Google)
    Android 14 及以上会在应用进程进入缓存状态 10 秒后将其冻结,冻结后所有线程停住
  3. Application.runInBackground Unity
    默认值 false,即在后台暂停;Android 在后台时无论如何设置都会暂停,iOS 会忽略这项设置
  4. MonoBehaviour.OnApplicationPause(bool) Unity
    应用被挂起或恢复运行时,向所有 MonoBehaviour 发送 OnApplicationPause(true/false)
  5. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY:系统的低内存终止程序结束了应用进程(不支持的设备会报告为 REASON_SIGNALED、SIGKILL)

相关原因

同一层:L2 客户端操作系统与设备

其他层中同样导致“掉线”的原因

查看含图示和实验的原卡片