क्रैश और अपवाद - Android SDK

यह दस्तावेज़ Android v3 के लिए Google Analytics SDK का इस्तेमाल करके क्रैश और अपवाद मेज़रमेंट की खास जानकारी देता है.

खास जानकारी

क्रैश और अपवाद मेज़रमेंट की मदद से, अपने ऐप्लिकेशन में होने वाले क्रैश और अपवादों की संख्या और टाइप को मेज़र किया जा सकता है. अपवाद में ये फ़ील्ड होते हैं:

फ़ील्ड का नाम ट्रैकर फ़ील्ड टाइप ज़रूरी है ब्यौरा
ब्यौरा Fields.EX_DESCRIPTION String नहीं अपवाद का ब्यौरा (ज़्यादा से ज़्यादा 100 वर्ण). इससे null .
isFatal Fields.EX_FATAL boolean हां यह बताता है कि अपवाद गंभीर था या नहीं. true जानलेवा होता है.

क्रैश और अपवाद से जुड़ा डेटा मुख्य रूप से, क्रैश और अपवाद से जुड़ी रिपोर्ट में उपलब्ध होता है.

अपवाद

ऐप्लिकेशन में होने वाली ऐसी गड़बड़ियों को अपवाद माना जा सकता है जिनके लिए आपने अपवाद हैंडलिंग के कोड के बारे में बताया है. जैसे, डेटा का अनुरोध करने के दौरान, कभी-कभी नेटवर्क कनेक्शन का टाइम आउट.

इस उदाहरण की तरह, ट्रैकर पर अपवाद फ़ील्ड की वैल्यू सेट करके और हिट भेजकर, अपवाद को मेज़र करें:

/*
 * An app tries to load a list of high scores from the cloud. If the request
 * times out, an exception is sent to Google Analytics
 */
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

  // StandardExceptionParser is provided to help get meaningful Exception descriptions.
 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
                       false)                                               // False indicates a nonfatal exception
      .build()
  );


  ... // Display alert to user that high scores are currently unavailable.
}

अपवाद के बारे में पता नहीं चलने वाला मेज़रमेंट

अपवाद के तौर पर नहीं मिले अपवाद, ऐसे मामलों को दिखाते हैं जहां आपके ऐप्लिकेशन को रनटाइम के दौरान अचानक कोई गड़बड़ी हुई हो और ये अक्सर जानलेवा होते हैं. इन स्थितियों की वजह से, ऐप्लिकेशन क्रैश हो जाता है. EasyTracker या ExceptionReporter क्लास का इस्तेमाल करके, बिना मिले अपवाद के तौर पर Google Analytics को अपने-आप भेजा जा सकता है.

EasyTracker का इस्तेमाल करना

EasyTracker का इस्तेमाल करके, नहीं पाए गए सभी अपवादों को अपने-आप भेजने के लिए, अपनी analytics.xml फ़ाइल में यह लाइन जोड़ें:

<bool name="ga_reportUncaughtExceptions">true</bool>

अपने-आप अपवाद को मापने की सुविधा का इस्तेमाल करके अपवाद भेजने के बाद, EasyTracker, अपवाद को Thread के डिफ़ॉल्ट अपवाद हैंडलर को पास कर देगा.

बेहतर तरीके से लागू करने की सुविधा का इस्तेमाल करना

अगर आपने बेहतर तरीके से लागू करने की सुविधा का इस्तेमाल किया है और EasyTracker का इस्तेमाल नहीं किया, तो अपने-आप कैप्चर हुए अपवाद के मेज़रमेंट को लागू करने के लिए, ExceptionReporter क्लास का इस्तेमाल करें.

किसी खास थ्रेड या आपके ऐप्लिकेशन में सभी थ्रेड के लिए, ExceptionReporter डिफ़ॉल्ट रूप से नहीं पढ़े गए अपवाद हैंडलर के तौर पर काम कर सकता है. Google Analytics को अपवाद भेजने के बाद, ExceptionReporter क्लास किसी ऐसे अपवाद हैंडलर को भेज सकती है जो आपको नहीं मिला है.

यह कोड, एक नया ExceptionReporter ऑब्जेक्ट बनाता है. साथ ही, इसे पता लगाए गए अपवाद के नए डिफ़ॉल्ट हैंडलर के तौर पर सेट करता है. इस वजह से, कैप्चर नहीं किए गए सभी अपवाद Google Analytics को भेजे जाएंगे. इसके बाद, उन्हें वापस नहीं पाए गए अपवाद के पिछले हैंडलर को भेज दिया जाएगा. ज़्यादातर ऐप्लिकेशन के लिए, डिफ़ॉल्ट हैंडलर लॉग के अपवाद को लॉग करेगा और ऐप्लिकेशन को बंद कर देगा.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    GoogleAnalytics.getInstance(this).getDefaultTracker(), // Tracker, may return null if not yet initialized.
    GAServiceManager.getInstance(),                        // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());          // Current default uncaught exception handler.

// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);

अपवाद के अपने-आप लागू होने वाले मेज़रमेंट का इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • अपवाद के अपने-आप मेज़रमेंट की सुविधा का इस्तेमाल करके भेजे गए सभी अपवादों को Google Analytics में 'घातक' के तौर पर रिपोर्ट किया जाता है.
  • डिफ़ॉल्ट रूप से, ब्यौरा फ़ील्ड अपवाद के टाइप, क्लास का नाम, तरीके का नाम, और थ्रेड के नाम का इस्तेमाल करके अपने-आप सेट हो जाता है.

अपवाद के ब्यौरे पार्स करना

Google Analytics को अपवाद के तौर पर मौजूद जानकारी पाने और भेजने की प्रोसेस को आसान बनाने के लिए, SDK टूल में StandardExceptionParser मौजूद है:

// Using StandardExceptionParser to get an Exception description.
try {

  // Request some scores from the network.
  ArrayList highScores = getHighScoresFromCloud();

} catch (IOException e) {

  // May return null if EasyTracker has not yet been initialized with a
  // property ID.
  EasyTracker easyTracker = EasyTracker.getInstance(this);

 	easyTracker.send(MapBuilder
      .createException(new StandardExceptionParser(this, null)              // Context and optional collection of package names
                                                                            // to be used in reporting the exception.
                       .getDescription(Thread.currentThread().getName(),    // The name of the thread on which the exception occurred.
                                       e),                                  // The exception.
	                     false)                                               // False indicates a fatal exception
      .build()
  );

  ... // Display alert to user that high scores are currently unavailable.
}

Google Analytics को अपवाद भेजते समय, ExceptionParser इंटरफ़ेस लागू करके और उसके setDescription तरीके को कॉल करके, अपना पार्सर भी लागू किया जा सकता है.