Đánh giá kỹ thuật

ANR sau Phase 1 — Word Relax Android

Bản cũ (225100/226103): 2026-09-15 → 2026-10-12 (28 ngày) • Bản mới (228100): 2026-10-06 → 2026-11-03 (sự kiện từ 2026-10-24, ~10 ngày) • Ngày báo cáo: 2026-11-03

Chỉ số chuyển biến chính

Số Issue ANR
87 → 16
Giảm 81.6% số dạng lỗi
Số sự kiện ANR
183 → 26
Giảm 85.8% tổng sự kiện
Tần suất sự kiện / ngày
~6.5 → ~2.6
Giảm 60.0% tốc độ phát sinh
Mẫu stack C# game
4 → 0
0/21 mẫu (sạch mã C# game)
Sự kiện Lenovo Tab M8
100 → 4
Giảm từ 39% xuống 13% tổng số
Lưu ý: Dữ liệu xuất chưa có số người dùng hoạt động (DAU/session) nên chưa thể tính ANR rate chuẩn; bản 228100 mới chỉ tích lũy dữ liệu ~10 ngày (từ 24/10). Cần kiểm tra chỉ số User-perceived ANR rate trực tiếp trên Play Console để xác nhận kết quả.

Tiến độ xử lý lỗi Phase 1

Đối soát trực tiếp mã nguồn trong workspace để phân loại trạng thái
Đã fix 7 mục
  • Dựng lại từ điển SQLite trên main thread ISS-01
  • Lấy thông tin quốc gia GetCountry đồng bộ HTTP ISS-02
  • Lấy GAID qua JNI trên main thread cho mọi máy ISS-03
  • Nhạc nền 147s nén DecompressOnLoad gây giật nạp ISS-12
  • Quét toàn bộ danh sách gói ứng dụng cài đặt ISS-16
  • Chờ FetchUserBlockANR vô hạn không có timeout ISS-22
  • Banner liên tục hủy và tạo lại, gửi yêu cầu dồn dập H-04
Còn sót 3 mục
  • Sao chép DB từ APK còn vòng lặp chờ bận (busy-wait) tối đa 10s trên main thread ISS-01
  • Đồng bộ từ điển SyncDictionary chạy 1 lần ở lần mở đầu sau cập nhật trên main thread ISS-01
  • Khởi tạo quảng cáo InitAds vẫn diễn ra trong cửa sổ Loading trước khi kích hoạt scene ISS-06
Chưa fix 6 mục chính
  • Quay lại app sau nghỉ (resume ≥ TimeBackHome) nạp scene đồng bộ ISS-04
  • Chuỗi tạm dừng/tiếp tục khi xem quảng cáo kích hoạt đặt lịch thông báo dồn dập ISS-05
  • Chuyển scene bằng LoadScene mặc định đồng bộ ISS-14
  • Truy xuất PlayerPrefs qua JNI liên tục không qua bộ nhớ đệm cache JNI-01
  • Thu gom rác GC chưa incremental và dọn tài nguyên UnloadUnusedAssets định kỳ ISS-25/24
  • Xin quyền thông báo ngay tại cửa sổ Loading ISS-28

ANR lặp lại

5 issue xuất hiện ở cả hai phiên bản, không có frame mã game nào trong stack
a6de15e9 59 → 8 sự kiện (6 user)
Main thread idle: Điểm nghẽn thực tế đã kết thúc trước khi lấy trace; cả main thread và UnityMain đều chờ ART suspend-all, UnityMain kẹt ở chỗ chuyển tiếp JNI.
3cc8c3c1 7 → 1 sự kiện (1 user)
GPU / RenderThread: Main thread chờ RenderThread của hwui vẽ Android View; GPU yếu bị quá tải khi chia sẻ giữa Unity GL thread và WebView quảng cáo.
a418eba8 4 → 2 sự kiện (2 user)
GPU / Native lock: Tranh chấp khóa native và RenderThread bị nghẽn do GPU Adreno trên thiết bị yếu xử lý không kịp lệnh vẽ.
2f07e162 1 → 1 sự kiện (1 user)
Video ad AppLovin + SafeDK: Màn hình mất focus, VideoView.suspend giải phóng MediaPlayer và chờ đóng kết nối mạng/DNS đồng bộ trên main thread.
39809415 1 → 1 sự kiện (1 user)
Animator trên UnityMain: UnityMain bận sắp xếp AnimatorJob khi nhiều Animator cùng kích hoạt đồng thời trên CPU Cortex-A53 yếu.

ANR mới trong bản 228100

Phân bố 26 sự kiện theo nhóm nguyên nhân và đánh giá bản chất
  • ◆ Mã issue mới chủ yếu do đổi phiên bản: Phần lớn là các lỗi cũ (WebView quảng cáo, Play Services, GPU) nhưng sinh mã ID mới vì phiên bản WebView và GMS trên máy người dùng đã được cập nhật.
  • ◆ Cụm tập trung bất thường (6/26 sự kiện): Phát sinh từ đúng 1 thiết bị Lenovo Tab M10 FHD Plus trong vòng 1 giờ (24/10 17:00), do Play Services nghẽn khi các SDK quảng cáo và Firebase khởi tạo dồn dập cùng lúc.
  • ◆ 0/21 mẫu stack chứa mã C# game: Toàn bộ các sự kiện ANR mới đều nằm trong SDK bên thứ ba, WebView hệ thống hoặc quá tải phần cứng khi xử lý đồ họa.

Phân loại thiết bị

So sánh tỷ lệ phát sinh ANR giữa bản cũ (256 sự kiện) và bản mới (30 sự kiện theo đặc tả thiết bị)
Theo dung lượng RAM
Theo nhân CPU
Theo hãng sản xuất SoC
Nhận định mấu chốt: Máy tính bảng chiếm 70% số sự kiện mới (21/30); nhóm máy ≥ 4GB RAM (8 sự kiện) hoàn toàn do SDK hoặc GPU quá tải, do đó không thể giải quyết triệt để chỉ bằng cơ chế chặn theo ngưỡng RAM.
Nhóm A — Tablet MTK A53/A35 1–2GB 13 sự kiện
MT8766A, MT8768A, MT8167x (API 29–30). Nguyên nhân chủ đạo: Khởi tạo GMS + Ads, WebView, Main thread idle. Cần giãn nạp ads và tắt banner mặc định.
Nhóm B — Thiết bị A53/A73 2–3GB khác 8 sự kiện
QM215, SDM429, RK3562, SDA450, Exynos 7904. Nguyên nhân chủ đạo: Main thread idle, GPU RenderThread. Ưu tiên giải quyết các khối nạp scene và resume.
Nhóm C — Thiết bị 3–4GB CPU/GPU yếu 6 sự kiện
SDM632, T618, MT6765H, MT8786, SM6115, MT6735. Nguyên nhân: GPU quá tải, Main thread idle khi render nặng. Cần hạ tải đồ họa khi có ad view.
Nhóm D — Thiết bị ≥ 4GB chip khá 3 sự kiện
SM7225, SDM670, T606. Nguyên nhân: Hoàn toàn trong SDK quảng cáo (DRM video, khởi tạo adapter). Cần cập nhật SDK và xem xét SafeDK.

Đề xuất hành động Phase 2

Các đầu việc kỹ thuật ưu tiên cao nhất cùng kế hoạch vận hành đối soát
  1. 1 Trì hoãn nạp màn hình khi quay lại ứng dụng: Chỉ bật cờ trạng thái trong OnApplicationPause, chuyển việc reset phiên và LoadSceneAsync sang coroutine thực thi sau 2–3 frame ISS-04
  2. 2 Chắn sự kiện pause/resume khi xem quảng cáo: Thiết lập cổng chặn khi mở quảng cáo, IAP hoặc xin quyền; chỉ thực hiện PushSchedule đặt thông báo khi thật sự thoát ứng dụng ISS-05
  3. 3 Tách biệt khởi tạo quảng cáo khỏi cửa sổ Loading: Dời việc gọi InitAds() ra sau khi màn hình chính đã tương tác trên thiết bị ≤ 3GB RAM / API ≤ 30; gửi yêu cầu quảng cáo tuần tự ISS-06/07
  4. 4 Chuyển điều hướng màn hình sang bất đồng bộ mặc định: Cập nhật hàm CUtils.LoadScene luôn sử dụng cơ chế nạp bất đồng bộ async ISS-14
  5. 5 Lưu đệm bộ nhớ cho PlayerPrefs: Tạo bộ nhớ đệm (cache) trên C# để triệt tiêu các thao tác truy xuất dữ liệu qua cầu nối JNI lặp đi lặp lại JNI-01
  6. 6 Tối ưu cơ chế thu gom rác bộ nhớ: Kích hoạt chế độ Incremental GC và loại bỏ việc gọi UnloadUnusedAssets định kỳ sau mỗi 5 màn chơi ISS-24/25
  7. 7 Chuyển đồng bộ từ điển và sao chép DB xuống luồng nền: Đưa tác vụ SyncDictionary và sao chép file cơ sở dữ liệu từ APK sang background task, loại bỏ hoàn toàn vòng chờ bận ISS-01
  8. 8 Giới hạn khung hình và giảm tải xử lý đồ họa: Khóa tốc độ 30 FPS và tắt các hiệu ứng nặng khi hiển thị banner hoặc quảng cáo trên các thiết bị nhóm A/B/C GPU-01
3 bước vận hành cần đối soát ngay (không sửa mã):
  • ✓ Kiểm tra tỷ lệ User-perceived ANR rate theo từng phiên bản trên Google Play Console (lọc riêng nhóm RAM ≤ 2GB và máy tính bảng).
  • ✓ Kiểm tra giá trị cấu hình từ xa ACTIVE_AUTO_BLOCK_ANR / ACTIVE_BLOCK_ANR trong khoảng thời gian 2026-10-24 → 2026-11-03 để loại trừ khả năng số liệu bị làm đẹp giả tạo do chặn thiết bị.
  • ✓ Thực hiện xuất lại dữ liệu từ Google Play Console sau khi phiên bản 228100 tích lũy đủ 28 ngày để đối soát chuẩn xác trên cùng độ dài chu kỳ.