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

Sách trắng lag game › L2 OS và thiết bị phía client

Ứng dụng di động chuyển xuống chạy nền App suspended in background

ID nguyên nhân co-mobile-bg · Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)

Mở thẻ gốc có hình minh họa và thí nghiệm →

Khi bạn tạm chuyển ra khỏi game để xem thông báo, vài giây sau OS tạm dừng (suspend) ứng dụng, và trong lúc đó server ngắt kết nối của bạn.

Vì sao Chuyển ra khỏi game để xem tin nhắn hoặc nghe điện thoại → Dẫn đến Engine game dừng xử lý game, OS cũng nhanh chóng dừng ứng dụng và kết nối mạng → Trên màn hình Quay lại thì đã mất kết nối, phải kết nối lại

Triệu chứng
Mất kết nối
Yếu tố
Ngưng trệ, Mất gói
Ai gặp phải
Chỉ mình tôi
Khi nào
Sau khi để yên một lúc, Khi làm một thao tác nhất định
Phụ trách
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Client: khi quay lại, kết nối lại ngay bằng session token (nối tiếp mà không cần đăng nhập lại) thay vì chờ kết nối đã đứt, rồi nhận trạng thái mới nhất một lần để đồng bộ. Server: khi mất heartbeat thì dọn kết nối nhưng vẫn giữ session nhân vật trong một khoảng ân hạn ngắn (không đá ra ngay), nếu người chơi kết nối lại trong khoảng đó thì nối tiếp bằng session token.
Con số tham khảo
Engine game thường dừng ngay khi bị đưa xuống nền. iOS tạm dừng ứng dụng sau vài giây, xin thêm thời gian thì thường cũng chỉ trong vòng vài chục giây; Android 14 trở lên đóng băng (freeze) ứng dụng đã rời màn hình sau khoảng 10 giây.
Trên đồ thị
Rớt kết nối hàng loạt · Số lần mất kết nối (heartbeat timeout), bản ghi ứng dụng tạm dừng
Chỗ cần xem
Đối chiếu theo session ID thời điểm ứng dụng tạm dừng và quay lại trong log client (Unity là OnApplicationPause) với lý do, thời điểm ngắt kết nối phía server. Với Android, xem thêm lý do kết thúc tiến trình ghi trong ApplicationExitInfo (như REASON_LOW_MEMORY)
Đúng nếu
client chuyển sang tạm dừng ngay trước khi server ngắt vì heartbeat timeout, và kết nối lại ngay sau khi quay lại
Loại trừ nếu
mất kết nối ngay cả khi game đang mở ở foreground → “Ánh xạ NAT hết hạn”, “IP dùng chung của nhà mạng (CGNAT)”, “Chuyển đổi Wi-Fi ↔ LTE hoặc 5G”
Cách kiểm tra
Cần log và chỉ số của server, client game
Tìm hiểu thêm
Khi thiếu bộ nhớ, điện thoại có thể tắt hẳn game đang chạy nền. Đó là lý do game khởi động lại từ đầu sau khi bạn mở camera hoặc ứng dụng thanh toán, xác thực rồi quay lại. Máy cấu hình càng thấp càng hay gặp.

Nguồn

  1. Extending your app’s background execution time Apple
    Khi xuống nền, applicationDidEnterBackground có 5 giây rồi ứng dụng bị tạm dừng; cần thêm thì xin thời gian bằng beginBackgroundTask (thời gian còn lại xem ở backgroundTimeRemaining)
  2. Cached apps freezer Android (Google)
    Android 14 trở lên đóng băng tiến trình ứng dụng ở trạng thái cached sau 10 giây; khi bị đóng băng, mọi thread đều dừng
  3. Application.runInBackground Unity
    Mặc định là false nên game dừng khi chạy nền; trên Android, cứ chạy nền là dừng bất kể thiết lập, còn iOS bỏ qua thiết lập này
  4. MonoBehaviour.OnApplicationPause(bool) Unity
    Khi ứng dụng bị tạm dừng hoặc chạy lại, gửi OnApplicationPause(true/false) tới mọi MonoBehaviour
  5. ApplicationExitInfo Android (Google)
    REASON_LOW_MEMORY: low memory killer của hệ thống đã kết thúc tiến trình ứng dụng (máy không hỗ trợ thì báo là REASON_SIGNALED, SIGKILL)

Nguyên nhân nên xem cùng

Cùng tầng: L2 OS và thiết bị phía client

Nguyên nhân ở tầng khác gây cùng triệu chứng (Mất kết nối)

Xem thẻ gốc có hình minh họa và thí nghiệm