الأعطال والاستثناءات - الإصدار الثاني من حزمة تطوير البرامج (SDK) لنظام التشغيل Android (الإصدار القديم)

يقدّم هذا المستند نظرة عامة عالية المستوى حول قياس الأعطال والاستثناءات باستخدام الإصدار الثاني من حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" لنظام التشغيل Android.

نظرة عامة

يسمح لك قياس الأعطال والاستثناءات بقياس عدد وأنواع الأعطال والاستثناءات التي تم رصدها وغير مرصودة في تطبيقك. ويتألف الاستثناء في "إحصاءات Google" من:

  • String (اختياري) الوصف: وصف للاستثناء (ما يصل إلى 100 حرف). تقبل null .
  • boolean isFatal – ما إذا كان الاستثناء خطيرًا. تشير السمة true إلى أنّها بالغة الوفاة.

تتوفر بيانات الأعطال والاستثناءات بشكل أساسي في تقرير الأعطال والاستثناءات.

الاستثناءات التي تم رصدها

الاستثناءات التي تم رصدها هي الأخطاء في تطبيقك التي حددت لها رمز التعامل مع الاستثناء. وهي بشكل عام الأخطاء التي تتوقع حدوثها أثناء الاستخدام العادي لتطبيقك والتي تريد أن يتمكن التطبيق من استردادها، مثل انتهاء المهلة العرضية للاتصال بالشبكة أثناء طلب الحصول على بيانات.

يمكنك قياس الاستثناءات التي تم رصدها من خلال إضافة sendException() إلى المجموعة catch من رمز معالجة الاستثناء.

في المثال التالي، يحاول أحد التطبيقات تحميل قائمة بالدرجات العالية من السحابة. إذا انتهت مهلة الطلب، ربما بسبب بطء الاتصال بالشبكة، سنرسل الاستثناء إلى "إحصاءات Google" قبل معالجته للمستخدم:

try {
  ArrayList highScores = getHighScores();            // Get scores from the cloud.
} catch (IOException e) {
  Tracker myTracker = EasyTracker.getTracker();      // Get a reference to tracker.
  myTracker.sendException(e.getMessage(), false);    // false indicates non-fatal exception.

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

قياس الاستثناءات غير المستفادة

تمثّل الاستثناءات غير المخطَّط لها الحالات التي واجه فيها تطبيقك ظروفًا غير متوقعة في وقت التشغيل وغالبًا ما تكون قاتلة، ما يؤدي إلى تعطُّل التطبيق نتيجةً لذلك. يمكن إرسال الاستثناءات غير المكتشفة إلى "إحصاءات Google" تلقائيًا باستخدام EasyTracker أو فئة ExceptionReporter.

استخدام EasyTracker

لإرسال جميع الاستثناءات غير المرصودة في تطبيقك تلقائيًا باستخدام EasyTracker، أضِف هذا السطر إلى ملف analytics.xml:

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

بعد إرسال استثناء باستخدام قياس الاستثناءات التلقائي، ستمرر EasyTracker الاستثناء إلى معالِج الاستثناء التلقائي Thread.

عند استخدام قياس الاستثناءات التلقائي، يجب مراعاة ما يلي:

  • يتم الإبلاغ عن جميع الاستثناءات التي تم إرسالها باستخدام قياس الاستثناءات التلقائي على أنّها خطيرة في "إحصاءات Google".
  • تتم تعبئة حقل الوصف تلقائيًا باستخدام تتبُّع تسلسل استدعاء الدوال البرمجية.

استخدام ExceptionReporter

استخدم الفئة ExceptionReporter لتنفيذ قياس تلقائي غير خاضع للاستثناء إذا كنت لا تستخدم EasyTracker. وهذه هي الفئة نفسها التي تتّبعها شركة EasyTracker لمعالجة تقارير الاستثناءات التلقائية.

يمكن استخدام ExceptionReporter كمعالج استثناء غير مرصود تلقائيًا لسلسلة محادثات معيّنة أو لجميع سلاسل المحادثات في تطبيقك. بعد إرسال استثناء إلى "إحصاءات Google"، يمكن للفئة ExceptionReporter ضبط الاستثناء اختياريًا إلى معالج استثناء غير مرصود تقدّمه.

ينشئ الرمز التالي كائن ExceptionReporter جديدًا ويضبطه كمعالج الاستثناء التلقائي الجديد غير المرصود. ونتيجةً لذلك، سيتم إرسال كل استثناء غير مرصود إلى "إحصاءات Google" ثم تمريره إلى معالج الاستثناء السابق غير المرصود. بالنسبة إلى معظم التطبيقات، سيسجل المعالج الافتراضي الاستثناء في السجل وينهي التطبيق.

UncaughtExceptionHandler myHandler = new ExceptionReporter(
    myTracker,                                        // Currently used Tracker.
    GAServiceManager.getInstance(),                   // GAServiceManager singleton.
    Thread.getDefaultUncaughtExceptionHandler());     // Current default uncaught exception handler.

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

استخدام ExceptionParser

توفّر حزمة تطوير البرامج (SDK) واجهة ExceptionParser يمكنك تنفيذها للحصول على الأوصاف الأكثر ملاءمةً من عمليات تتبُّع تسلسل استدعاء الدوال البرمجية، وذلك عند إرسال استثناءات غير مرصودة إلى "إحصاءات Google". تتضمّن واجهة ExceptionParser طريقة واحدة وهي: getDescription(String threadName, Throwable t).

يمكنك ضبط Tracker لاستخدام ExceptionParser عند إرسال استثناءات غير خاضعة للرقابة إلى "إحصاءات Google" من خلال استدعاء setExceptionParser(ExceptionParser parser) كما في هذا المثال:

// Where myParser represents your implementation of ExceptionParser.
ExceptionParser parser = new myParser(context);

// Where myTracker is an instance of Tracker.
myTracker.setExceptionParser(parser);

بعد ذلك، سيستخدم جهاز التتبُّع طريقة getDescription() للمحلل اللغوي لملء حقل الوصف لأي استثناءات غير مرصودة يتم إرسالها إلى "إحصاءات Google".