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

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

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