แก้ไขข้อบกพร่องแอป Android ตามแท็ก ANR ในหน้าแดชบอร์ด Crashlytics

ข้อผิดพลาด Application Not Responding (ANR) จะเกิดขึ้นเมื่อเธรด UI ของ แอปพลิเคชันไม่ตอบสนองนานกว่า 5 วินาที อ่านเพิ่มเติมเกี่ยวกับ ANR และการวินิจฉัย ANR ได้ใน เอกสารประกอบของ Android

นอกจากนี้ Crashlytics ยังช่วยระบุเธรดที่มีปัญหาได้ด้วย เราจะวิเคราะห์ ANR แล้วติดแท็กเทรดที่เกี่ยวข้องในแดชบอร์ด DevOps และความผูกพัน > Crashlytics เพื่อให้คำแนะนำเกี่ยวกับวิธีแก้ไขข้อบกพร่องของ ANR

ส่วนต่อไปนี้ในหน้านี้จะอธิบายความหมายของแท็ก ANR แต่ละแท็ก แสดงตัวอย่าง ANR ที่มีแท็กนั้น และแนะนำวิธีแก้ปัญหาเพื่อแก้ไขข้อบกพร่องของ ANR

Triggered ANR

เธรดที่ถูกบล็อกนานเกินไปและเรียกให้เกิด ANR จะมีคำอธิบายประกอบด้วย แท็ก Triggered ANR นี้

เธรดที่มีปัญหาอาจเป็นเธรดหลักของแอปหรือเธรดใดก็ตามที่พบว่าไม่ตอบสนอง อย่างไรก็ตาม เธรดที่ติดแท็กเป็น Triggered ANR อาจเป็นหรือไม่เป็นสาเหตุ ที่แท้จริง ของ ANR ก็ได้ เพื่อให้ข้อมูลเชิงลึกสำหรับการแก้ไขข้อบกพร่องและแก้ไข ANR เหล่านี้ Crashlytics ยังติดแท็กเธรดอื่นๆ ที่เกี่ยวข้องกับ ANR ด้วย ดูข้อมูลเกี่ยวกับแท็กอื่นๆ ที่อาจใช้กับเธรดได้ในส่วนต่อไปนี้ของหน้านี้

Deadlocked

เธรดใดก็ตามที่พบว่าเกี่ยวข้องกับการติดตายซึ่งนำไปสู่ ANR จะมี คำอธิบายประกอบด้วยแท็ก Deadlocked นี้

การติดตายเกิดขึ้นเมื่อเธรดเข้าสู่สถานะรอเนื่องจากทรัพยากรที่จำเป็นถูกเธรดอื่นถือครองอยู่ ซึ่งเธรดนั้นก็รอทรัพยากรที่เธรดแรกถือครองอยู่เช่นกัน หากเธรดหลักของแอปอยู่ในสถานการณ์นี้ ANR มีแนวโน้มที่จะเกิดขึ้น

คำแนะนำ

ดูเธรดที่เกี่ยวข้องกับการติดตายและตรวจสอบทรัพยากร/การล็อกที่เธรดเหล่านั้นได้รับ ดูวิธีแก้ปัญหาที่เป็นไปได้ใน อัลกอริทึมการติดตาย และ อัลกอริทึมการป้องกันการติดตาย

IO Root blocking

เธรดใดก็ตามที่ดำเนินการ I/O ช้าและบล็อกเธรด Triggered ANR จะมีคำอธิบายประกอบด้วยแท็ก IO Root blocking หากเธรด Triggered ANR ไม่ถูกบล็อกโดยเธรดอื่น เธรด IO Root blocking จะเป็นเธรด Root blocking ด้วย

คำแนะนำ

โดยทั่วไปแล้ว แอปไม่ควรดำเนินการ I/O ที่ใช้ทรัพยากรมากในเธรดหลัก ในกรณีที่เธรดหลักเป็น IO Root blocking คุณยังใช้ โหมดเข้มงวด เพื่อระบุการดำเนินการ I/O ที่ไม่ได้ตั้งใจซึ่งเกิดขึ้นในเธรดหลัก ได้ด้วย

Root blocking

เธรดใดก็ตามที่บล็อกเธรดที่ติดแท็ก Triggered ANR จะมีคำอธิบายประกอบด้วยแท101}Root blocking หากเธรดได้รับการติดแท็กว่าเป็นทั้ง Root blocking และ Triggered ANR หมายความว่าจะไม่มีเธรดอื่นมา บล็อกเธรดนั้น

หากเธรด Triggered ANR ใดรอเธรดอื่น (อาจรอแบบทรานซิทีฟ) เธรดนั้นจะเป็น Root blocking อาจมีสาเหตุต่างๆ ที่ทำให้เธรดเป็นสาเหตุของ ANR

คำแนะนำ

ลดงานที่ใช้ CPU มากในเธรดหลัก ใช้เธรดงานหรือเธรดเบื้องหลังเพื่อทำงานที่ใช้ CPU มาก

ลดงานที่ใช้ I/O มาก เช่น การโหลดจากฐานข้อมูล ในเธรดหลัก

Unknown root cause

เธรดจะได้รับการติดแท็ก Unknown root cause หากเป็นเธรดที่เรียกให้เกิด ANR แต่ไม่มีการใช้งานในกระบวนการเมื่อเกิด ANR Crashlytics ไม่มีข้อมูลเพียงพอที่จะระบุ สาเหตุ ไม่มีเหตุผลที่ชัดเจนว่าทำไม ANR นี้จึงเกิดขึ้น

คำแนะนำ

ทำตามคำแนะนำทั่วไปเกี่ยวกับวิธีป้องกัน ANR เช่น ระบุตำแหน่งในโค้ดที่เธรดหลักของแอปอาจไม่ว่างนานกว่า 5 วินาที