נפה באגים באפליקציית Android שלך על סמך תגי ANR בלוח המחוונים של Crashlytics

שגיאות יישום לא מגיב (ANR) מופעלות כאשר שרשור ממשק המשתמש של היישום אינו מגיב במשך יותר מ -5 שניות . תוכל לקרוא עוד על ANRs ואבחון ANR בתיעוד של Android .

בנוסף, Crashlytics יכול לעזור באיתור שרשורים בעייתיים ספציפיים. אנו מנתחים מקרי ANR, ולאחר מכן, בלוח המחוונים של Crashlytics , אנו מתייגים שרשורים רלוונטיים כדי לספק רמזים כיצד לנפות באגים ב-ANR.

הסעיפים הבאים בדף זה מסבירים את המשמעות של כל תג ANR, מציגים דוגמה של ANR עם תג זה, ומספקים פתרון מומלץ לאיפוי באגים ב-ANR.

Triggered ANR

שרשור שנחסם זמן רב מדי והפעיל את ה-ANR מסומן בזה תג Triggered ANR .

השרשור הבעייתי יכול להיות השרשור הראשי של האפליקציה, או כל שרשור שנמצא כלא מגיב. עם זאת, השרשור מתויג כ Triggered ANR עשוי להיות הסיבה האמיתית ל-ANR או לא. כדי לספק תובנות לאיתור באגים ולתיקון ה-ANR האלה, Crashlytics גם מתייג כל שרשור אחר שמעורב ב-ANR. בסעיפים הבאים של דף זה, למד על התגים האחרים שניתן להחיל על שרשור.

Deadlocked

כל שרשור שנמצא כמעורב במבוי סתום שהוביל ל-ANR מסומן בזה תג Deadlocked .

מבוי סתום מתרחש כאשר שרשור נכנס למצב המתנה מכיוון שמשאב נדרש מוחזק על ידי שרשור אחר, שגם הוא ממתין למשאב המוחזק על ידי השרשור הראשון. אם השרשור הראשי של האפליקציה נמצא במצב זה, סביר להניח שיתרחשו מקרי ANR.

המלצה

תסתכל על שרשורים המעורבים במבוי סתום ובדוק את המשאבים/מנעולים שנרכשו על ידי השרשורים האלה. עיין באלגוריתמים למניעת Deadlock ו-Deadlock לפתרונות אפשריים.

IO Root blocking

כל שרשור שביצע פעולות קלט/פלט איטיות וחסם את שרשור Triggered ANR מסומן ב- תג IO Root blocking . אם ה שרשור Triggered ANR לא נחסם על ידי שרשורים אחרים, ואז חוט IO Root blocking הוא גם א Root blocking שורשים.

המלצה

באופן כללי, האפליקציה שלך לא אמורה לבצע פעולות I/O יקרות בשרשור הראשי. במקרה של הוויית החוט הראשי IO Root blocking , אתה יכול גם להשתמש במצב קפדני כדי לזהות פעולות קלט/פלט לא מכוונות שמתרחשות בשרשור הראשי.

Root blocking

כל שרשור שחסם את השרשור שתויג כ Triggered ANR מסומן ב- תג Root blocking . אם שרשור מתויג כשניהם Root blocking ו Triggered ANR , אז אין שרשורים אחרים שחוסמים את השרשור הזה.

אם בכלל שרשורי Triggered ANR שהופעלו חיכו (אולי באופן טרנזיטיבי) לשרשורים אחרים, הם כן Root blocking . יכולות להיות סיבות שונות לכך שרשור הוא גורם השורש ל-ANR.

המלצה

צמצם עבודה אינטנסיבית של מעבד בשרשור הראשי. השתמש בשרשורי עובדים או רקע לביצוע משימות אינטנסיביות של מעבד.

צמצם עבודה אינטנסיבית של קלט/פלט, כמו טעינה ממסד נתונים, על השרשור הראשי.

Unknown root cause

שרשור מתויג עם ה תג Unknown root cause אם זה היה השרשור שהפעיל את ה-ANR אך היה פעיל בתהליך כאשר ה-ANR התרחש. ל-Crashlytics אין מספיק מידע כדי לקבוע את שורש הסיבה. אין סיבה ברורה לכך שה-ANR הזה התרחש.

המלצה

עקוב אחר העצה הכללית כיצד למנוע ANRs. לדוגמה, זהה את המקומות בקוד שלך שבהם השרשור הראשי של האפליקציה יכול להיות תפוס במשך יותר מ -5 שניות .