يمكن أن تحصل عدة مكتبات وواجهات برمجة تطبيقات للنظام على عمليات قفل التنشيط التي يمكن نسبتها إلى تطبيقك. وقد يصعِّب ذلك تحديد قفل تنشيط في تطبيقك قد يتسبب في حدوث مشكلة. في حال إساءة استخدام واجهة برمجة تطبيقات، قد يؤدي ذلك إلى احتفاظ تطبيقك بقفل التنشيط لفترة طويلة جدًا، حتى إذا لم تكن تستدعي واجهات برمجة تطبيقات قفل التنشيط مباشرةً.
يسرد هذا المستند بعض أسماء قفل التنشيط الشائعة التي قد تظهر لك عند استخدام أدوات تصحيح أخطاء قفل التنشيط. قد تظهر لك هذه الأسماء أيضًا في تقرير من مؤشرات Android الحيوية. في بعض الحالات، قد يكون قد تم إنشاء قفل التنشيط بواسطة مكتبة أو واجهة برمجة تطبيقات للنظام. في الحالات الأخرى، هناك سبب يؤدي إلى أن تخفي الأدوات اسم قفل التنشيط الذي تستخدمه في التطبيق. يمكنك استخدام أدوات تصحيح الأخطاء لتحديد أقفال التنشيط التي تتضمّن أخطاء، ثم البحث عن اسم قفل التنشيط في هذا المستند لتحديد واجهة برمجة التطبيقات التي قد تكون سبب المشكلة وكيفية حلّها.
يتناول هذا المستند أسماء أقفال التنشيط التالية. في كلتا الحالتَين، على الرغم من أنّه قد يتم إنشاء قيد التنشيط من خلال مكتبة أو واجهة برمجة تطبيقات أخرى، يتمّ إسناد القيد إلى التطبيق الذي استدعى واجهة برمجة التطبيقات هذه.
*alarm*
: تم إنشاؤها بواسطةAlarmManager
.-
AudioIn
وAudioMix
: تم إنشاؤهما بواسطة واجهات برمجة تطبيقات الوسائط. GOOGLE_C2DM
: تم الحصول عليها أثناء إرسال بثّ من خلال خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) إلى التطبيق.-
*job*/<package_name>/<package_and_job_name>
: تم إنشاؤها بواسطة مهام JobScheduler. -
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: تم إنشاؤها بواسطة عمال WorkManager. -
NetworkLocationLocator
وFusedLocation
و*location*
: تم إنشاؤها باستخدام واجهات برمجة تطبيقات الموقع الجغرافي. _UNKNOWN
: يتم عرض هذا الرمز من خلال أدوات تصحيح الأخطاء إذا بدا أنّ اسم قفل التنشيط يستخدم معلومات تحديد الهوية الشخصية (PII).
*alarm*
يحصل AlarmManager
على قفل التنشيط هذا وينسبه إلى التطبيق المُرسِل. يحصل AlarmManager
على قفل التنشيط عندما يرنّ المنبّه، ويُطلقه عند انتهاء تنفيذ onReceive()
لبث المنبّه.
مقترَح
ننصحك باتّباع الممارسات التالية لتحسين سلوك التنبيهات:
- استخدِم
AlarmManager
لتحسين تكرار جدولة المنبّه. - استخدِم المنبّهات
RTC_WAKEUP
(التي توقظ الجهاز) عند الضرورة فقط. - قلِّل من استخدام المنبّهات، وتجنَّب تنفيذ مهام طويلة باستخدام
onReceive()
.
AudioIn
وAudioMix
وما إلى ذلك
تحصل واجهات برمجة التطبيقات لنظام التشغيل (Media APIs) على أقفال تنشيط مختلفة تبدأ أسماؤها بـ Audio
عند تسجيل الصوت أو تشغيله. تُنسَب عمليات قفل التنشيط إلى
التطبيق المُرسِل للمكالمة.
يتم الحصول على AudioIn
أثناء تسجيل AudioRecord
في وضع كاميرا الفيديو،
عندما يكون الميكروفون مفعّلاً. يتم الحصول على AudioMix
أثناء تشغيل AudioTrack
على الجهاز. قد تحصل واجهات برمجة التطبيقات الأخرى للوسائط على عمليات قفل الاستيقاظ بأسماء أخرى
تبدأ بـ Audio
.
مقترَح
ننصحك باتّباع الممارسات التالية:
- لا تستخدِم أسماء أقفال التنشيط التي تبدأ بـ
Audio
. - إذا كنت تستخدم واجهات برمجة تطبيقات الوسائط، لن تحتاج إلى الحصول على عمليات قفل التنشيط مباشرةً، بل يمكنك الاعتماد على واجهات برمجة التطبيقات للحصول على عمليات قفل التنشيط اللازمة نيابةً عنك.
- عند استخدام واجهات برمجة تطبيقات الوسائط، عليك إنهاء جلسة الوسائط عندما لا تكون بحاجة إليها.
GOOGLE_C2DM
تحصل خدمة GCM على قفل التنشيط هذا أثناء إرسال رسالة Firebase Cloud Message
(FCM) إلى التطبيق. ويتم إزالة قفل التنشيط بعد انتهاء تنفيذ طريقة بث FCM
onMessageReceived()
.
مقترَح
ننصحك باتّباع الممارسات التالية لتحسين سلوك "إشعارات Google من خادم Firebase":
- تحسين معدّل تكرار إرسال الرسائل باستخدام خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
- لا تستخدِم الرسائل الفورية ذات الأولوية العالية من منصة إدارة الموافقة (FCM) ما لم تكن الرسالة بحاجة فعلاً إلى إرسالها على الفور.
- يُرجى إكمال طريقة
onMessageReceived()
في أسرع وقت ممكن. يمكنك الاطّلاع على إرشادات Firebase للحصول على مزيد من المعلومات.
*job*/<package_name>/<package_and_job_name>
وتستخدم مهام JobScheduler عمليات قفل التنشيط هذه أثناء تنفيذ المهام في الخلفية. يتمّ إسناد عمليات قفل التنشيط إلى التطبيق الذي أنشأ العمال.
"<package_name>" هو اسم حزمة تطبيقك، وليس
النص الحرفي <package name>
. وبالمثل، "<package_and_job_name>"
هو اسم الحزمة متبوعًا باسم الوظيفة. *job*
هو تسلسل الأحرف
*job*
، مع علامات النجمة، ولا يتم استخدام علامات النجمة كأحرف بدل.
في ما يلي مثال على اسم قفل التنشيط هذا:
*job*/com.example.app/com.example.app.example.path.ExampleJobService
مقترَح
تحقّق من استخدامك لمهام JobScheduler. على وجه الخصوص، اتّبِع إرشاداتنا حول تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
وتستخدم وحدات عمل WorkManager أقفال التنشيط هذه أثناء تنفيذ المهام في الخلفية. يتمّ إسناد عمليات قفل التنشيط إلى التطبيق الذي أنشأ العمال.
"<package_name>" هو اسم حزمة تطبيقك، وليس
النص الحرفي <package name>
. *job*
هو تسلسل الأحرف
*job*
، مع علامات النجمة، ولا يتم استخدام علامات النجمة كأحرف بدل.
مقترَح
تحقّق من استخدامك لعمال WorkManager. على وجه الخصوص، اتّبِع إرشاداتنا حول تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.
"NetworkLocationLocator
" و"FusedLocation
" و"*location*
"
تستخدم LocationManager
و
FusedLocationProviderClient
أسماء قفل التنشيط هذه للحصول على
الموقع الجغرافي للجهاز وإرساله. وتُنسَب عمليات قفل التنشيط إلى التطبيق الذي استدعى تلك واجهتَي برمجة التطبيقات.
مقترَح
تحسين استخدام الموقع الجغرافي على سبيل المثال، يمكنك ضبط مهلات أو تجميع طلبات المواقع الجغرافية أو استخدام ميزة "تعديلات الموقع الجغرافي التلقائية".
_UNKNOWN
إذا كانت أدوات تصحيح الأخطاء تعتقد أنّ اسم قفل التنشيط يحتوي على معلومات تحديد هوية شخصية، لن تعرض اسم قفل التنشيط الفعلي. بدلاً من ذلك،
يتم تصنيف قفل التنشيط على أنّه _UNKNOWN
. على سبيل المثال، قد تفعل الأدوات ذلك إذا كان اسم شاشة القفل المخصص للتنشيط يحتوي على عنوان بريد إلكتروني.
مقترَح
اتّبِع أفضل الممارسات المتعلقة بتسمية قفل التنشيط، وتجنَّب استخدام معلومات تحديد الهوية الشخصية في اسم قفل التنشيط. إذا عثرت على قفل تنشيط يحمل اسم _UNKNOWN
منسود إلى تطبيقك، حاوِل
تحديد قفل التنشيط هذا ومنحه اسمًا مختلفًا.