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

ข้อผิดพลาดเกี่ยวกับแอปพลิเคชันไม่ตอบสนอง (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 มากในเธรดหลัก ใช้เธรดของ Worker หรือเธรดเบื้องหลังเพื่อทำงานที่ใช้ CPU มาก

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

Unknown root cause

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

คำแนะนำ

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