Hiệu năng và thiết bị
ANR
viết đầy đủ là Application Not Responding
còn gọi là app không phản hồi
Android kết luận app treo vì luồng giao diện bị chặn quá lâu, và mời người dùng tắt app. iOS không có ANR — chỗ đó gọi là hang, đo bằng thước khác.
ANR không phải crash — app vẫn sống, chỉ là không trả lời kịp. Android chờ khoảng năm giây cho một thao tác chạm, rồi hiện hộp thoại đề nghị đóng app.
Nguyên nhân gần như luôn giống nhau, và giống nhau trên cả hai nền tảng: một việc nặng chạy trên luồng giao diện. Đọc ghi file lớn, gọi mạng đồng bộ, truy vấn cơ sở dữ liệu, giải mã ảnh.
≤ 0,2%
ngưỡng nội bộ cho ANR rate
0,47%
mức Google Play coi là quá ngưỡng
5 giây
thời gian Android chờ trước khi kết luận
iOS không có ANR
Chữ ANR là của riêng Android: hộp thoại đó do Android dựng, mốc năm giây do Android đặt, con số ANR rate do Android vitals đếm. iOS không có cái nào trong ba thứ đó. Cùng một lỗi chặn luồng giao diện, trên iOS cho hai kết cục khác nhau tuỳ thời điểm bị chặn:
Đơ lúc app đang chạy — hang
- Hệ điều hành không hiện hộp thoại, cũng không giết app
- Màn hình đứng im tới khi việc nặng xong, hoặc tới khi người dùng tự vuốt tắt app
- Apple tính là hang khi luồng giao diện bị chặn từ 250ms — chặt hơn Android hai mươi lần
- Xcode Organizer báo hang rate: số giây đơ trên mỗi giờ dùng, kèm mức trung vị và mức P90
Đơ lúc chuyển trạng thái — watchdog
- Lúc khởi động, lúc quay lại từ nền, lúc bị đưa xuống nền
- Hệ điều hành giết thẳng app, không hỏi người dùng
- Vào thẳng crash report với mã kết thúc
0x8badf00d - Hạn mức Apple không công bố; crash report thực tế cho thấy khoảng 20 giây cho lần khởi động, 10 giây cho một lần chuyển scene
Hai thước đo, không đọc lẫn nhau được
Dòng cuối là chỗ dễ mắc kẹt nhất. Android có một con số cứng để đối chiếu, iOS thì không — nên ngưỡng nội bộ cho iOS phải neo vào chính bản đang chạy: hang rate của bản mới cao hơn bản trước là tín hiệu chặn, dù không ai công bố bao nhiêu là nhiều. Cách đọc này nằm trong bảng giám sát production, ngân sách kèm theo nằm ở performance budget.
Với người dùng thì không nền tảng nào đỡ hơn: crash đóng nhanh rồi mở lại được, còn đơ bắt họ ngồi nhìn một màn hình chết mà không biết nên chờ hay nên tắt.

