ANR là hộp thoại hệ thống hiện ra khi main thread (UI thread) bị chặn quá lâu nên app không phản hồi. Các ngưỡng chính:
- Không xử lý input event (chạm, phím) trong 5 giây.
BroadcastReceiver.onReceive()chạy quá lâu (10 giây foreground, 60 giây background).- Service không hoàn tất khởi động/thao tác đúng hạn.
Nguyên nhân điển hình: làm việc nặng trên main thread — I/O đĩa/mạng, query database lớn, parse JSON khổng lồ, bitmap lớn, hoặc lock/deadlock.
Cách phòng tránh:
- Đẩy mọi tác vụ nặng khỏi main thread: coroutine + Dispatchers.IO, WorkManager cho việc chạy nền/trì hoãn được.
- Không I/O hay truy vấn DB đồng bộ trên UI thread.
- Giữ callback vòng đời và onReceive() thật nhẹ.
- Theo dõi trên Android vitals (Play Console) để bắt ANR thực tế từ người dùng.