Gỡ lỗi ứng dụng Android của bạn dựa trên thẻ ANR trong bảng điều khiển Crashlytics

Lỗi Ứng dụng không phản hồi (ANR) được kích hoạt khi chuỗi giao diện người dùng của ứng dụng không phản hồi trong hơn 5 giây . Bạn có thể đọc thêm về ANR và chẩn đoán ANR trong tài liệu Android .

Ngoài ra, Crashlytics có thể giúp xác định các chủ đề có vấn đề cụ thể. Chúng tôi phân tích ANR và sau đó, trong bảng điều khiển Crashlytics , chúng tôi gắn thẻ các chuỗi có thể áp dụng để cung cấp gợi ý về cách gỡ lỗi ANR.

Các phần sau trên trang này giải thích ý nghĩa của từng thẻ ANR, hiển thị ANR mẫu với thẻ đó và cung cấp giải pháp được đề xuất để gỡ lỗi ANR.

Triggered ANR

Một chuỗi đã bị chặn quá lâu và kích hoạt ANR sẽ được chú thích bằng điều này Thẻ Triggered ANR .

Chuỗi có vấn đề có thể là chuỗi chính của ứng dụng hoặc bất kỳ chuỗi nào được phát hiện là không phản hồi. Tuy nhiên, chủ đề được gắn thẻ là Triggered ANR có thể là nguyên nhân thực sự của ANR hoặc không. Để cung cấp thông tin chi tiết nhằm gỡ lỗi và khắc phục các ANR này, Crashlytics cũng gắn thẻ bất kỳ chuỗi nào khác có liên quan đến ANR. Trong các phần tiếp theo của trang này, hãy tìm hiểu về các thẻ khác có thể áp dụng cho một chủ đề.

Deadlocked

Bất kỳ chủ đề nào được phát hiện có liên quan đến bế tắc dẫn đến ANR đều được chú thích bằng dòng này Thẻ Deadlocked .

Bế tắc xảy ra khi một luồng đi vào trạng thái chờ vì một tài nguyên được yêu cầu được giữ bởi một luồng khác, luồng này cũng đang chờ tài nguyên được giữ bởi luồng đầu tiên. Nếu luồng chính của ứng dụng rơi vào tình huống này thì ANR có thể xảy ra.

Sự giới thiệu

Xem xét các luồng liên quan đến bế tắc và kiểm tra tài nguyên/khóa mà các luồng đó thu được. Tham khảo các thuật toán ngăn chặn DeadlockDeadlock để biết các giải pháp khả thi.

IO Root blocking

Bất kỳ luồng nào đang thực thi các thao tác I/O chậm và đã chặn Chuỗi Triggered ANR được chú thích bằng Thẻ IO Root blocking . Nếu Chuỗi Triggered ANR không bị chặn bởi các chuỗi khác, khi đó Chuỗi IO Root blocking cũng là một Chủ đề Root blocking .

Sự giới thiệu

Nói chung, ứng dụng của bạn không nên thực thi các thao tác I/O tốn kém trên luồng chính. Trong trường hợp luồng chính được IO Root blocking , bạn cũng có thể sử dụng Chế độ nghiêm ngặt để xác định mọi thao tác I/O không chủ ý đang diễn ra trên luồng chính.

Root blocking

Bất kỳ chủ đề nào đã chặn chủ đề được gắn thẻ là Triggered ANR được chú thích bằng Thẻ Root blocking . Nếu một chủ đề được gắn thẻ là cả hai Root blocking Triggered ANR thì không có luồng nào khác chặn luồng đó.

Nếu có Các luồng Triggered ANR đang chờ (có thể chuyển tiếp) cho các luồng khác, chúng là Root blocking . Có thể có nhiều lý do khác nhau khiến một chuỗi là nguyên nhân cốt lõi gây ra ANR.

Sự giới thiệu

Giảm thiểu công việc đòi hỏi nhiều CPU trong luồng chính. Sử dụng các luồng công việc hoặc nền để thực hiện các tác vụ đòi hỏi nhiều CPU.

Giảm thiểu công việc đòi hỏi nhiều I/O, chẳng hạn như tải từ cơ sở dữ liệu, trên luồng chính.

Unknown root cause

Một chủ đề được gắn thẻ với Thẻ Unknown root cause nếu đó là luồng đã kích hoạt ANR nhưng không hoạt động trong quá trình khi ANR xảy ra. Crashlytics không có đủ thông tin để xác định nguyên nhân gốc rễ. Không có lý do rõ ràng tại sao ANR này lại xảy ra.

Sự giới thiệu

Hãy làm theo lời khuyên chung về cách ngăn chặn ANR. Ví dụ: xác định các vị trí trong mã của bạn mà luồng chính của ứng dụng có thể bận trong hơn 5 giây .