يعتمد المستخدمون على هواتفهم ويحتاجون إلى جهاز يعمل في جميع الأوقات. ومع ذلك، في بعض الأحيان، تنتهي الأجهزة في حلقات إعادة التشغيل، ما يدفع المستخدمين إلى إرسال طلبات دعم أو استفسارات حول الضمان. تُعدّ هذه العملية محبطة للمستخدمين ومكلفة لمصنّعي الأجهزة وشركات الاتصالات.
يتضمّن Android 8.0 (مستوى واجهة برمجة التطبيقات 26) والإصدارات الأحدث ميزة تؤدي إلى تفعيل عملية الإنقاذ عندما ترصد مكوّنات أساسية في النظام عالقة في حلقات الأعطال. عند تلقّي هذه الإشارة، تتصاعد ميزة "فريق الإنقاذ" من خلال سلسلة من الإجراءات لاسترداد الجهاز. كحلّ أخير، تعيد ميزة "فريق الإنقاذ" تشغيل الجهاز في وضع الاسترداد وتطلب من المستخدم إجراء إعادة الضبط على الإعدادات الأصلية.
التنفيذ
تكون ميزة "فريق الإنقاذ" مفعَّلة تلقائيًا، ويتم تنفيذها في /services/core/java/com/android/server/RescueParty.java. تتلقّى ميزة "فريق الإنقاذ" معلومات عن أحداث التشغيل والأعطال، وتبدأ في الحالات التالية:
- إذا أعيد تشغيل
system_serverأكثر من خمس مرات في خمس دقائق - إذا تعرّض تطبيق نظام مستمر للعطل أكثر من خمس مرات في 30 ثانية
عندما ترصد ميزة "فريق الإنقاذ" إحدى هذه الحالات، فإنّها تتصاعد إلى مستوى الإنقاذ التالي، وتعالج المهمة المرتبطة بهذا المستوى، وتسمح للجهاز بالمتابعة لمعرفة ما إذا كان سيتم استرداده. يزداد كل مستوى عدوانية بشكل تدريجي في ما يتم محوه أو إعادة ضبطه. يطلب المستوى الأخير من المستخدم إعادة الضبط على الإعدادات الأصلية للجهاز.
لا تتطلب ميزة "فريق الإنقاذ" توفير أجهزة خاصة. في حال تنفيذها، يجب أن يستجيب نظام استرداد الجهاز للأمر --prompt_and_wipe_data، ويجب أن توفّر الأجهزة طريقة للمستخدمين لتأكيد أي إتلاف لبيانات المستخدم قبل المتابعة. يجب أن يمنح نظام الاسترداد أيضًا المستخدم خيار محاولة تشغيل جهازه مرة أخرى.
بما أنّ كل مستوى من مستويات الإنقاذ يمكن أن يستغرق ما يصل إلى خمس دقائق قبل أن يصبح الجهاز قابلاً للتشغيل مرة أخرى، يجب ألا يضيف مصنّعو الأجهزة مستويات إنقاذ مخصّصة. إذا كان الجهاز غير قابل للتشغيل لفترة أطول، من المرجّح أن يبدأ المستخدمون طلب دعم أو استفسار حول الضمان بدلاً من استرداد أجهزتهم بأنفسهم.
التحقق من صحة البيانات
تمنع ميزة "فريق الإنقاذ" جميع أحداث الإنقاذ عندما يكون للجهاز اتصال نشط ببيانات USB، لأنّ ذلك يشير بقوة إلى أنّ أحد المستخدمين يعمل على تصحيح أخطاء الجهاز.
لتجاوز هذا المنع، شغِّل الأمر التالي:
adb shell setprop persist.sys.enable_rescue 1بعد ذلك، فعِّل حلقة أعطال في النظام أو واجهة المستخدم:
لتفعيل حلقة أعطال منخفضة المستوى في
system_server، شغِّل الأمر التالي:adb shell setprop debug.crash_system 1adb shell stopadb shell startلتفعيل حلقة أعطال متوسطة المستوى في SystemUI، شغِّل الأمر التالي:
adb shell setprop debug.crash_sysui 1
تؤدي كلتا حلقتَي الأعطال إلى تفعيل منطق الإنقاذ. تسجِّل ميزة "فريق الإنقاذ" أيضًا جميع عمليات الإنقاذ في سجلّات PackageManager المستمرة المخزّنة في /data/system/uiderrors.txt لفحصها وتصحيح أخطائها لاحقًا. تتضمّن تقارير الأخطاء أيضًا هذه السجلّات المستمرة ضمن قسم رسائل التحذير من الحزمة.