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

ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) थ्रेड के पांच सेकंड से ज़्यादा समय तक जवाब न देने पर, ऐप्लिकेशन में कोई समस्या है (एएनआर) वाली गड़बड़ियां ट्रिगर होती हैं. एएनआर और उनका पता लगाने के बारे में ज़्यादा जानने के लिए, Android के दस्तावेज़ पढ़ें.

इसके अलावा, Crashlytics की मदद से, समस्या पैदा करने वाले थ्रेड का पता लगाया जा सकता है. हम एएनआर का विश्लेषण करते हैं. इसके बाद, DevOps & Engagement > Crashlytics डैशबोर्ड में, हम उन थ्रेड को टैग करते हैं जिन पर एएनआर लागू होता है. इससे, एएनआर को डीबग करने के बारे में जानकारी मिलती है.

इस पेज पर दिए गए सेक्शन में, हर एएनआर टैग का मतलब बताया गया है. साथ ही, उस टैग के साथ एएनआर का उदाहरण दिखाया गया है. इसके अलावा, एएनआर को डीबग करने का सुझाव दिया गया है.

Triggered ANR

जिस थ्रेड को बहुत ज़्यादा समय के लिए ब्लॉक किया गया था और जिसकी वजह से एएनआर ट्रिगर हुआ था उसे इस Triggered ANR टैग से एनोटेट किया जाता है.

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

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 कर दिया जाता है. किसी थ्रेड के एएनआर की मुख्य वजह होने की कई वजहें हो सकती हैं.

सुझाव

मुख्य थ्रेड में सीपीयू इंटेंसिव काम को कम से कम करें. सीपीयू इंटेंसिव टास्क पूरे करने के लिए, वर्कर या बैकग्राउंड थ्रेड का इस्तेमाल करें.

मुख्य थ्रेड पर, डेटाबेस से लोड करने जैसे I/O इंटेंसिव काम को कम करें.

Unknown root cause

किसी थ्रेड को Unknown root cause टैग तब किया जाता है, जब उस थ्रेड की वजह से एएनआर की गड़बड़ी हुई हो, लेकिन एएनआर की गड़बड़ी होने के दौरान वह थ्रेड काम नहीं कर रहा हो. Crashlytics के पास मुख्य वजह का पता लगाने के लिए ज़रूरी जानकारी नहीं है. इस एएनआर के होने की कोई वजह नहीं है.

सुझाव

ANR की समस्याओं को रोकने के बारे में सामान्य सलाह का पालन करें. उदाहरण के लिए, अपने कोड में उन जगहों की पहचान करें जहां ऐप्लिकेशन का मुख्य थ्रेड, पांच सेकंड से ज़्यादा समय तक व्यस्त रह सकता है.