Crashlytics डैशबोर्ड में ANR टैग के आधार पर अपने Android ऐप को डीबग करें

एप्लिकेशन नॉट रिस्पॉन्डिंग (एएनआर) त्रुटियां तब ट्रिगर होती हैं जब एप्लिकेशन का यूआई थ्रेड 5 सेकंड से अधिक समय तक प्रतिक्रिया नहीं दे रहा है। आप Android दस्तावेज़ में ANR और ANR के निदान के बारे में अधिक पढ़ सकते हैं।

इसके अतिरिक्त, क्रैशलिटिक्स विशिष्ट समस्याग्रस्त थ्रेड्स को इंगित करने में मदद कर सकता है। हम ANR का विश्लेषण करते हैं, और फिर, Crashlytics डैशबोर्ड में, हम ANR को डीबग करने के तरीके पर संकेत प्रदान करने के लिए लागू थ्रेड्स को टैग करते हैं।

इस पृष्ठ पर निम्नलिखित अनुभाग बताते हैं कि प्रत्येक ANR टैग का क्या अर्थ है, उस टैग के साथ एक उदाहरण ANR दिखाता है, और ANR को डीबग करने के लिए एक अनुशंसित समाधान प्रदान करता है।

Triggered ANR

एक थ्रेड जो बहुत लंबे समय से अवरुद्ध था और ANR को ट्रिगर करता था, उसे इसके साथ एनोटेट किया गया है Triggered ANR टैग.

समस्याग्रस्त थ्रेड ऐप के लिए मुख्य थ्रेड हो सकता है, या अनुत्तरदायी पाया जाने वाला कोई भी थ्रेड हो सकता है। हालाँकि, थ्रेड को इस रूप में टैग किया गया है Triggered ANR ANR का वास्तविक कारण हो भी सकता है और नहीं भी। इन ANR को डिबग करने और ठीक करने के लिए अंतर्दृष्टि प्रदान करने के लिए, Crashlytics ANR में शामिल किसी भी अन्य थ्रेड को भी टैग करता है। इस पृष्ठ के निम्नलिखित अनुभागों में, उन अन्य टैगों के बारे में जानें जिन्हें किसी थ्रेड पर लागू किया जा सकता है।

Deadlocked

कोई भी थ्रेड जो गतिरोध में शामिल पाया जाता है जिसके कारण एएनआर हुआ, उसे इसके साथ एनोटेट किया जाता है 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 का मूल कारण क्यों है।

सिफारिश

मुख्य थ्रेड में सीपीयू गहन कार्य को कम करें। सीपीयू गहन कार्यों को करने के लिए वर्कर या बैकग्राउंड थ्रेड का उपयोग करें।

मुख्य थ्रेड पर डेटाबेस से लोड करने जैसे I/O गहन कार्य को कम करें।

Unknown root cause

एक थ्रेड को इसके साथ टैग किया गया है Unknown root cause टैग यदि यह वह थ्रेड था जिसने ANR को ट्रिगर किया था लेकिन ANR होने पर प्रक्रिया में निष्क्रिय था। क्रैशलिटिक्स के पास मूल कारण निर्धारित करने के लिए पर्याप्त जानकारी नहीं है। यह ANR क्यों उत्पन्न हुआ इसका कोई स्पष्ट कारण नहीं है।

सिफारिश

ANRs को रोकने के तरीके पर सामान्य सलाह का पालन करें। उदाहरण के लिए, अपने कोड में उन स्थानों की पहचान करें जहां ऐप का मुख्य थ्रेड 5 सेकंड से अधिक समय तक व्यस्त रह सकता है।