تصحيح أخطاء تطبيق Android استنادًا إلى علامات ANR في لوحة بيانات Crashlytics

تحدث أخطاء "التطبيق لا يستجيب" عندما لا تستجيب سلسلة واجهة مستخدم التطبيق لأكثر من 5 ثوانٍ. يمكنك الاطّلاع على مزيد من المعلومات حول أخطاء ANR وتشخيصها في مستندات Android.

بالإضافة إلى ذلك، يمكن أن تساعدك أداة Crashlytics في تحديد سلاسل محادثات معيّنة تتضمّن مشاكل. ونحلّل أخطاء ANR، ثم نضع علامة على سلاسل المحادثات السارية في لوحة بيانات Crashlytics لتقديم نصائح حول كيفية تصحيح أخطاء ANR.

توضِّح الأقسام التالية في هذه الصفحة معنى كل علامة ANR، وتعرض مثالاً على خطأ ANR يتضمّن تلك العلامة، وتقدّم حلًا مقترَحًا لتصحيح أخطاء ANR.

Triggered ANR

يتم وضع تعليق توضيحي على سلسلة محادثات تم حظرها لفترة طويلة جدًا وتسببت في ظهور خطأ ANR باستخدام هذه العلامة Triggered ANR.

يمكن أن تكون سلسلة المحادثات التي تتضمّن مشكلة هي سلسلة المحادثات الرئيسية للتطبيق، أو أي سلسلة محادثات تم رصد عدم استجابتها. ومع ذلك، قد يكون السلسلة المُشار إليها باسم Triggered ANR هي السبب الحقيقي لخطأ ANR أو قد لا يكون السبب. لتوفير إحصاءات لتصحيح أخطاء ANR هذه وحلّها، يُشار أيضًا في Crashlytics إلى أيّ سلاسل محادثات أخرى متعلّقة بخطأ ANR. في القسمين التاليين من هذه الصفحة، يمكنك التعرّف على العلامات الأخرى التي يمكن تطبيقها على سلسلة محادثات.

Deadlocked

يتم وضع علامة Deadlocked توضيحية على أيّ سلاسل محادثات يتم رصد أنّها متورّطة في حالة انسداد مسدود أدّى إلى حدوث خطأ ANR.

يحدث هذا الخطأ عندما تدخل سلسلة تعليمات في حالة الانتظار لأنّ مثيلًا مطلوبًا من الموارد يحتفظ به مثيل آخر من سلاسل التعليمات، والذي ينتظر أيضًا مثيلًا من الموارد يحتفظ به المثيل الأول من سلاسل التعليمات. إذا كانت سلسلة التعليمات الرئيسية للتطبيق في هذه الحالة، من المحتمل حدوث أخطاء ANR.

الاقتراح

اطّلِع على سلاسل المحادثات المعنيّة بالتوقّف المفاجئ للعمليات وتحقّق من الموارد/القيود التي حصلت عليها هذه سلاسل المحادثات. راجِع التوقف المفاجئ وخوارزميات منع التوقف المفاجئ للاطّلاع على الحلول الممكنة.

IO Root blocking

يتمّ وضع تعليق توضيحي بالعلامة IO Root blocking على أيّ سلسلة تعليمات كانت تُجري عمليات بطيئة متعلّقة بوحدات الإدخال والإخراج وحظرَت سلسلة التعليمات Triggered ANR. إذا لم تكن سلسلة رسائل Triggered ANR محظورة من خلال سلاسل رسائل أخرى، فتكون سلسلة رسائل IO Root blocking هي أيضًا سلسلة رسائل Root blocking.

الاقتراح

بوجهٍ عام، يجب ألا ينفذ تطبيقك عمليات مُكلّفة متعلّقة بوحدات الإدخال والإخراج في سلسلة التعليمات الرئيسية. في حال كانت سلسلة التعليمات الرئيسية IO Root blocking، يمكنك أيضًا استخدام الوضع الصارم لتحديد أي عمليات إدخال/إخراج غير مقصودة تحدث في سلسلت التعليمات الرئيسية.

Root blocking

يتم وضع تعليق توضيحي بالعلامة Root blocking على أي سلسلة محادثات تحظر سلسلة محادثات تم وضع علامة عليها باستخدام العلامة Triggered ANR. إذا تم وضع علامة على سلسلة محادثات على أنّها كلاً من Root blocking و Triggered ANR، هذا يعني أنّه ما مِن سلاسل محادثات أخرى تحظر هذه السلسلة.

إذا كانت أي سلاسل تعليمات Triggered ANR في انتظار سلاسل تعليمات أخرى (ربما بشكل تصاعدي)، تكون Root blocking. يمكن أن تكون هناك أسباب مختلفة تجعل سلسلتَي رسائل البرمجة سببًا أساسيًا في حدوث خطأ ANR.

الاقتراح

قلِّل من الأعمال المكثفة التي تتطلّب استخدام وحدة المعالجة المركزية في سلسلة المهام الرئيسية. استخدِم مؤشرات الترابط العاملة أو مؤشرات الترابط في الخلفية للقيام بالمهام المكثفة لوحدة المعالجة المركزية.

قلِّل من العمل المكثّف لوحدات الإدخال والإخراج، مثل التحميل من قاعدة بيانات، في سلسلة التعليمات الرئيسية.

Unknown root cause

تتم الإشارة إلى سلسلة محادثات بالعلامة Unknown root cause إذا كانت هي السلسلة التي أدّت إلى حدوث خطأ ANR ولكنّها كانت غير نشطة في العملية عندما حدث خطأ ANR. لا تتوفّر لدى "Crashlytics" معلومات كافية لتحديد السبب الأساسي. ما مِن سبب واضح لحدوث خطأ ANR هذا.

الاقتراح

اتّبِع النصائح العامة حول كيفية منع حدوث أخطاء ANR. على سبيل المثال، حدِّد الأماكن في الرمز البرمجي التي يمكن أن تكون فيها سلسلة التطبيق الرئيسية مشغولة لأكثر من 5 ثوانٍ.