عمليات التنشيط هي آلية في واجهة برمجة التطبيقات
AlarmManager تتيح للمطوّرين ضبط منبّه لتنشيط جهاز في وقت محدّد. يضبط تطبيقك منبّه استيقاظ من خلال استدعاء إحدى طرق set() في AlarmManager باستخدام العلامة RTC_WAKEUP أو ELAPSED_REALTIME_WAKEUP. عندما يتم تشغيل منبّه التنشيط، يخرج الجهاز من وضع توفير الطاقة ويحتفظ بقفل تنشيط جزئي أثناء تنفيذ طريقة onReceive() أو onAlarm() الخاصة بالمنبّه. إذا تم تشغيل منبّهات التنشيط بشكل مفرط، يمكن أن يؤدي ذلك إلى استنزاف بطارية الجهاز.
إذا كان تطبيقك يوقظ الجهاز بشكل مفرط، يمكنك اتّباع الإرشادات الواردة في هذه الصفحة لتشخيص المشكلة وحلّها.
حلّ المشكلة
تم طرح AlarmManager في الإصدارات الأولى من نظام Android الأساسي، ولكن بمرور الوقت، أصبحت العديد من حالات الاستخدام التي كانت تتطلّب AlarmManager في السابق تتطلّب ميزات أحدث، مثل WorkManager.
يحتوي هذا القسم على نصائح لتقليل عدد تنبيهات التنشيط، ولكن على المدى الطويل، ننصحك بنقل تطبيقك ليتوافق مع الاقتراحات الواردة في قسم أفضل الممارسات.
حدِّد المواضع في تطبيقك التي تُجدوِل فيها تنبيهات التنشيط، وقلِّل معدّل تكرار تشغيل هذه التنبيهات. وفي ما يلي بعض المعلومات الإضافية:
ابحث عن طلبات إلى طرق
set()مختلفة فيAlarmManagerتتضمّن العلامةRTC_WAKEUPأوELAPSED_REALTIME_WAKEUP.ننصحك بتضمين اسم الحزمة أو الفئة أو الطريقة في اسم علامة التنبيه حتى تتمكّن من تحديد الموقع الجغرافي في المصدر الذي تم فيه ضبط التنبيه بسهولة. إليك بعض النصائح الإضافية:
- لا تُدرِج أي معلومات تكشف الهوية الشخصية في الاسم، مثل عنوان البريد الإلكتروني. بخلاف ذلك، يسجّل الجهاز
_UNKNOWNبدلاً من اسم المنبّه. - لا تسترد اسم الفئة أو الطريقة آليًا، مثلاً من خلال استدعاء
getName()، لأنّه قد يتم تشويشه بواسطة Proguard. بدلاً من ذلك، استخدِم سلسلة مبرمَجة. - لا تُضِف عدّادًا أو معرّفات فريدة إلى علامات التنبيه. لن يتمكّن النظام من تجميع المنبّهات التي تم ضبطها بهذه الطريقة لأنّها جميعًا تتضمّن معرّفات فريدة.
- لا تُدرِج أي معلومات تكشف الهوية الشخصية في الاسم، مثل عنوان البريد الإلكتروني. بخلاف ذلك، يسجّل الجهاز
بعد حلّ المشكلة، تأكَّد من أنّ تنبيهات الاستيقاظ تعمل كما هو متوقّع من خلال تنفيذ أمر ADB التالي:
adb shell dumpsys alarm
يقدّم هذا الأمر معلومات عن حالة خدمة نظام الإنذار على الجهاز. لمزيد من المعلومات، اطّلِع على dumpsys.
أفضل الممارسات
لا تستخدِم تنبيهات التنشيط إلا إذا كان تطبيقك بحاجة إلى تنفيذ عملية موجَّهة للمستخدم (مثل نشر إشعار أو تنبيه المستخدم). للاطّلاع على قائمة بأفضل الممارسات المتعلّقة بـ AlarmManager، راجِع جدولة التنبيهات.
لا تستخدِم
AlarmManager لجدولة المهام التي يتم تنفيذها في الخلفية، خاصةً المهام المتكررة أو المهام التي تتطلب الاتصال بالشبكة. استخدِم
WorkManager
لجدولة المهام التي تعمل في الخلفية لأنّها توفّر المزايا التالية:
- تجميع المهام في حِزم: يتم دمج المهام لتقليل استهلاك البطارية.
- الثبات: إذا تمت إعادة تشغيل الجهاز، يتم تنفيذ مهام WorkManager المجدوَلة بعد انتهاء عملية إعادة التشغيل.
- المعايير: يمكن تشغيل المهام استنادًا إلى شروط، مثل ما إذا كان الجهاز قيد الشحن أو ما إذا كانت شبكة Wi-Fi متاحة
لمزيد من المعلومات، يُرجى الاطّلاع على دليل المعالجة في الخلفية.
لا تستخدِم AlarmManager
لجدولة عمليات التوقيت التي تكون صالحة فقط أثناء تشغيل التطبيق (أي يجب إلغاء عملية التوقيت عند خروج المستخدم من التطبيق). في هذه الحالات، استخدِم الفئة
Handler لأنّها
أسهل في الاستخدام وأكثر فعالية.
اقتراحات مخصصة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة
- عمليات قفل التنشيط الجزئي المتوقِّفة
- طلبات ANR