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

Game-Lag-Whitepaper › L2 Client-OS und Gerät

Wechsel der mobilen App in den Hintergrund App suspended in background

Ursachen-ID co-mobile-bg · Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Wird die App kurz minimiert, um eine Benachrichtigung zu lesen, pausiert das OS sie nach einigen Sekunden (Suspend). In dieser Zeit trennt der Server die Verbindung des Spielers.

Warum Spiel wird für eine Nachricht oder einen Anruf in den Hintergrund geschickt → Folge Engine hält das Spielgeschehen an, kurz darauf pausiert das OS auch App und Netzwerk → Auf dem Bildschirm Bei der Rückkehr ist die Verbindung schon abgebrochen, Reconnect

Symptome
Verbindungsabbruch
Faktoren
Stillstand, Paketverlust
Wer ist betroffen
Nur ich
Wann
Nach Inaktivität, Bei bestimmten Aktionen
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Server-Entwicklung (Entwicklungsteam)
Aufgaben Entwicklungsteam
Client: bei der Rückkehr sofort per Session-Token automatisch neu verbinden (Session ohne erneuten Login fortsetzen), ohne auf die abgebrochene Verbindung zu warten, den aktuellen Zustand in einem Schritt abholen und abgleichen. Server: bei ausbleibendem Heartbeat die Verbindung aufräumen, die Charakter-Session aber für eine kurze Karenzzeit halten (nicht sofort entfernen), bei Reconnect innerhalb dieser Zeit per Session-Token fortsetzen.
Größenordnungen
Spiel-Engines halten meist sofort beim Minimieren an. iOS pausiert die App nach einigen Sekunden, mit zusätzlich angeforderter Zeit meist innerhalb einiger Dutzend Sekunden. Ab Android 14 werden Apps, die nicht mehr im Vordergrund sind, nach etwa 10 s eingefroren.
Im Graphen
Verbindungen brechen gleichzeitig ab · Anzahl der Abbrüche (Heartbeat-Timeout), Einträge zum Pausieren der App
Wo nachsehen
Zeitpunkte von App-Pause und Rückkehr im Client-Log (in Unity OnApplicationPause) über die Session-ID mit Grund und Zeitpunkt der Trennung auf dem Server abgleichen. Unter Android auch die in ApplicationExitInfo hinterlegten Beendigungsgründe des Prozesses (etwa REASON_LOW_MEMORY) prüfen
Spricht dafür
Kurz vor der Trennung wegen Heartbeat-Timeout auf dem Server ging der Client in die Pause, direkt nach der Rückkehr verbindet er sich neu
Spricht dagegen
Verbindung brach ab, während die App im Vordergrund war: „Ablauf des NAT-Mappings“, „Geteilte Provider-IP (CGNAT)“, „Wechsel WLAN ↔ LTE/5G“
Prüfmittel
Logs oder Metriken aus Spielserver bzw. Client nötig
Mehr dazu
Bei Speichermangel beenden Smartphones minimierte Spiele mitunter ganz. Deshalb startet das Spiel nach einem Abstecher in die Kamera oder in eine Zahlungs- oder Authentifizierungs-App von vorn. Je schwächer das Gerät, desto häufiger passiert das.

Quellen

  1. Extending your app’s background execution time Apple
    Beim Wechsel in den Hintergrund bleiben applicationDidEnterBackground 5 s, danach wird pausiert. Mehr Zeit lässt sich mit beginBackgroundTask anfordern (Restzeit in backgroundTimeRemaining)
  2. Cached apps freezer Android (Google)
    Ab Android 14 werden App-Prozesse im Cached-Zustand nach 10 s eingefroren, dann stehen alle Threads still
  3. Application.runInBackground Unity
    Standardwert false, die App hält im Hintergrund an. Android hält im Hintergrund unabhängig von der Einstellung an, iOS ignoriert die Einstellung
  4. MonoBehaviour.OnApplicationPause(bool) Unity
    Wird die App pausiert oder fortgesetzt, erhalten alle MonoBehaviours OnApplicationPause(true/false)
  5. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: Der Low Memory Killer des Systems hat den App-Prozess beendet (Geräte ohne Unterstützung melden REASON_SIGNALED bzw. SIGKILL)

Verwandte Ursachen

Gleiche Schicht: L2 Client-OS und Gerät

Ursachen aus anderen Schichten mit demselben Symptom (Verbindungsabbruch)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen