عمليات تنبيه مفرطة

عمليات التنشيط هي آلية في واجهة برمجة تطبيقات AlarmManager تسمح للمطوّرين بضبط منبّه لإيقاظ أحد الأجهزة في وقت محدّد. يضبط تطبيقك إنذارًا للاستيقاظ من خلال استدعاء إحدى طرق set() في AlarmManager باستخدام العلامة RTC_WAKEUP أو ELAPSED_REALTIME_WAKEUP. عند تشغيل إنذار الاستيقاظ، يخرج الجهاز من وضع الطاقة المنخفضة ويحتفظ بقفل تنشيط جزئي أثناء تنفيذ طريقة onReceive() أو onAlarm() المنبه. إذا تم تشغيل منبّهات الاستيقاظ بشكل مفرط، قد يتم استنزاف بطارية الجهاز.

لمساعدتك في تحسين جودة التطبيقات، يراقب Android التطبيقات تلقائيًا بحثًا عن إنذارات الاستيقاظ الزائدة ويعرض المعلومات في "مؤشرات Android الحيوية". للحصول على معلومات عن طريقة جمع البيانات، يُرجى الاطّلاع على مستندات Play Console.

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

حل المشكلة

تم إطلاق AlarmManager في الإصدارات الأولى من نظام Android الأساسي، ولكن بمرور الوقت، أصبح العديد من حالات الاستخدام التي كانت تتطلب في السابق AlarmManager أفضل الآن من خلال ميزات أحدث، مثل WorkManager. يتضمّن هذا القسم نصائح للحدّ من منبّهات الاستيقاظ، ولكن على المدى الطويل، يمكنك نقل بيانات تطبيقك لاتّباع الاقتراحات الواردة في قسم أفضل الممارسات.

يمكنك تحديد الأماكن في تطبيقك التي يتم فيها جدولة منبّهات الاستيقاظ وتقليل معدّل تشغيل هذه المنبّهات. وفي ما يلي بعض المعلومات الإضافية:

  • ابحث عن الطلبات الواردة إلى طرق set() المتنوّعة في AlarmManager والتي تتضمّن العلامة RTC_WAKEUP أو ELAPSED_REALTIME_WAKEUP.

  • نوصي بتضمين اسم الطرد أو الفئة أو الطريقة في اسم علامة المنبه بحيث يمكنك التعرف بسهولة على الموقع الذي تم ضبط المنبه فيه في المصدر. في ما يلي بعض النصائح الإضافية:

    • اترك أي معلومات لتحديد الهوية الشخصية (PII) في الاسم، مثل عنوان البريد الإلكتروني. وبخلاف ذلك، سيسجّل الجهاز القيمة _UNKNOWN بدلاً من اسم المنبّه.
    • لا تحصل على اسم الفئة أو الطريقة آليًا، مثلاً من خلال استدعاء getName()، لأنه قد يتم إخفاء مفاتيح فك تشفير المحتوى باستخدام Proguard. استخدِم بدلاً من ذلك سلسلة بيانات غير قابلة للتغيير في البرنامج.
    • لا تضِف عدّادًا أو معرّفات فريدة إلى علامات المنبّهات. لن يتمكن النظام من تجميع المنبهات التي يتم ضبطها بهذه الطريقة لأن لها جميعًا معرّفات فريدة.

بعد إصلاح المشكلة، تأكَّد من أنّ منبّهات الاستيقاظ تعمل على النحو المتوقّع من خلال تنفيذ أمر ADB التالي:

adb shell dumpsys alarm

يقدم هذا الأمر معلومات عن حالة خدمة نظام الإنذار على الجهاز. لمزيد من المعلومات، راجع dumpsys.

أفضل الممارسات

لا تستخدم تنبيهات الاستيقاظ إلا إذا كان التطبيق يحتاج إلى تنفيذ عملية موجّهة للمستخدم (مثل نشر إشعار أو تنبيه المستخدم). للحصول على قائمة بأفضل ممارسات AlarmManager، راجع جدولة المنبهات.

لا تستخدم AlarmManager لجدولة المهام في الخلفية، خاصةً المهام المتكرّرة أو المهام في الخلفية بالشبكة. يمكنك استخدام WorkManager لجدولة المهام في الخلفية لأنّه يوفّر المزايا التالية:

  • التجميع - يتم تجميع الوظائف لتقليل استهلاك البطارية
  • الاستمرارية - في حال إعادة تشغيل الجهاز، يتم تنفيذ مهام WorkManager المُجدوَلة بعد انتهاء عملية إعادة التشغيل
  • المعايير: يمكن تنفيذ المهام بناءً على شروط مثل ما إذا كان الجهاز قيد الشحن أو شبكة WiFi

لمزيد من المعلومات، يُرجى الاطّلاع على دليل المعالجة في الخلفية.

لا تستخدم AlarmManager لجدولة عمليات التوقيت التي تكون صالحة فقط أثناء تشغيل التطبيق (بمعنى آخر، يجب إلغاء عملية التوقيت عند خروج المستخدم من التطبيق). في تلك الحالات، استخدِم الفئة Handler لأنّها أسهل في الاستخدام وأكثر فعالية.