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

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

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