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

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

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

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

Triggered ANR

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

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