عمليات التنشيط هي آلية في واجهة برمجة تطبيقات
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. استخدِم بدلاً من ذلك سلسلة بيانات غير قابلة للتغيير في البرنامج. - لا تضِف عدّادًا أو معرّفات فريدة إلى علامات المنبّهات. لن يتمكن النظام من تجميع المنبهات التي يتم ضبطها بهذه الطريقة لأن لها جميعًا معرّفات فريدة.
- اترك أي معلومات لتحديد الهوية الشخصية (PII) في الاسم، مثل
عنوان البريد الإلكتروني. وبخلاف ذلك، سيسجّل الجهاز القيمة
بعد إصلاح المشكلة، تأكَّد من أنّ منبّهات الاستيقاظ تعمل على النحو المتوقّع من خلال تنفيذ أمر ADB التالي:
adb shell dumpsys alarm
يقدم هذا الأمر معلومات عن حالة خدمة نظام الإنذار على الجهاز. لمزيد من المعلومات، راجع dumpsys.
أفضل الممارسات
لا تستخدم تنبيهات الاستيقاظ إلا إذا كان التطبيق يحتاج إلى تنفيذ عملية موجّهة للمستخدم (مثل نشر إشعار أو تنبيه المستخدم). للحصول على قائمة بأفضل ممارسات AlarmManager، راجع جدولة المنبهات.
لا تستخدم AlarmManager
لجدولة المهام في الخلفية،
خاصةً المهام المتكرّرة أو المهام في الخلفية بالشبكة. يمكنك استخدام
WorkManager
لجدولة المهام في الخلفية لأنّه يوفّر المزايا التالية:
- التجميع - يتم تجميع الوظائف لتقليل استهلاك البطارية
- الاستمرارية - في حال إعادة تشغيل الجهاز، يتم تنفيذ مهام WorkManager المُجدوَلة بعد انتهاء عملية إعادة التشغيل
- المعايير: يمكن تنفيذ المهام بناءً على شروط مثل ما إذا كان الجهاز قيد الشحن أو شبكة WiFi
لمزيد من المعلومات، يُرجى الاطّلاع على دليل المعالجة في الخلفية.
لا تستخدم AlarmManager
لجدولة عمليات التوقيت التي تكون صالحة فقط أثناء تشغيل التطبيق (بمعنى
آخر، يجب إلغاء عملية التوقيت عند خروج المستخدم
من التطبيق). في تلك الحالات، استخدِم الفئة
Handler
لأنّها
أسهل في الاستخدام وأكثر فعالية.
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عند إيقاف JavaScript.
- عمليات قفل تنشيط جزئية متوقفة
- أخطاء ANR