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

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

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

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

Triggered ANR

يتم وضع العلامة Triggered ANR على سلسلة التعليمات التي تم حظرها لفترة طويلة جدًا وتسبّبت في حدوث خطأ 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، يمكنك أيضًا استخدام وضع Strict Mode لتحديد أي عمليات إدخال/إخراج غير مقصودة تحدث في سلسلة التعليمات الرئيسية.

Root blocking

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

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

الاقتراح

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

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

Unknown root cause

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

الاقتراح

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