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

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

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

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

Triggered ANR

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

समस्या वाली थ्रेड, ऐप्लिकेशन की मुख्य थ्रेड हो सकती है या ऐसी कोई भी थ्रेड हो सकती है जो काम नहीं कर रही है. हालांकि, Triggered 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 होने के दौरान वह प्रोसेस में शामिल नहीं होता. Crashlytics में इस समस्या की मुख्य वजह का पता लगाने के लिए ज़रूरी जानकारी मौजूद नहीं है. इस ANR की कोई साफ़ वजह नहीं है.

सुझाव

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