एप्लिकेशन नॉट रिस्पॉन्डिंग (एएनआर) त्रुटियां तब ट्रिगर होती हैं जब एप्लिकेशन का यूआई थ्रेड
इसके अतिरिक्त, क्रैशलिटिक्स विशिष्ट समस्याग्रस्त थ्रेड्स को इंगित करने में मदद कर सकता है। हम 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 को रोकने के तरीके पर सामान्य सलाह का पालन करें। उदाहरण के लिए, अपने कोड में उन स्थानों की पहचान करें जहां ऐप का मुख्य थ्रेड