تساعدك هذه المستندات في تحديد حالات استخدام قفل التنشيط وتحسينها في تطبيقك، كما تسلّط الضوء على ما إذا كانت هناك عمليات قفل تنشيط تكتسبها مكتبات أو واجهات برمجة تطبيقات النظام الأخرى المرتبطة بحالة الاستخدام هذه. بما أنّ عمليات قفل التنشيط هذه تُنسب إلى تطبيقك، قد يكون من الصعب تحديد مصدر عملية قفل التنشيط التي تسبّب مشاكل. يمكن أن يؤدي الاستخدام غير الصحيح لواجهة برمجة التطبيقات إلى وضع علامة على تطبيقك بسبب الاستخدام المفرط لعمليات قفل التنشيط، حتى إذا لم تكن تكتسب عمليات قفل التنشيط بشكل صريح.
تسرد هذه المستندات بعض أسماء عمليات قفل التنشيط الشائعة التي قد تصادفها عند استخدام أدوات تصحيح أخطاء قفل التنشيط أو في التقارير الواردة من "المؤشرات الحيوية". يمكن أن تنشأ هذه الأسماء من مكتبة أو واجهة برمجة تطبيقات النظام، أو قد تكون مبهمة. باستخدام أدوات تصحيح الأخطاء لتحديد عمليات قفل التنشيط التي لا تعمل بشكل صحيح ثم البحث عن اسم قفل التنشيط في هذه المستندات، يمكنك تحديد واجهة برمجة التطبيقات التي قد تسبّب المشكلة والعثور على اقتراحات حول كيفية تحسين استخدامها.
توضّح هذه المستندات حالات الاستخدام الشائعة لاكتساب عمليات قفل التنشيط، وتفصّل أسماء عمليات قفل التنشيط التي تستخدمها واجهات برمجة التطبيقات والمكتبات المختلفة، وتقدّم اقتراحات وأفضل الممارسات لتحسين استخدام عمليات قفل التنشيط وتقليله.
- AlarmManager
- الصوت والوسائط
- البلوتوث
- أدوات الاستشعار في الجهاز
- خدمة المراسلة عبر السحابة الإلكترونية Firebase (FCM)
- JobScheduler
- الموقع الجغرافي
- المراسلة عن بُعد
- WorkManager
_UNKNOWN: يتم عرضه من خلال أدوات تصحيح الأخطاء إذا بدا أنّ اسم قفل التنشيط يستخدم معلومات تكشف الهوية الشخصية (PII).
AlarmManager
AlarmManager تكتسب عمليات قفل التنشيط وتنسبها إلى التطبيق الذي يستدعيها. AlarmManager تكتسب قفل التنشيط عند انطلاق المنبّه، وتزيل
قفل التنشيط عند انتهاء تنفيذ طريقة onReceive()
لبث المنبّه.
أسماء عمليات قفل التنشيط
تنشئ AlarmManager عمليات قفل تنشيط باسم *alarm*. (علامات النجمة جزء من اسم قفل التنشيط، ولا تمثّل أحرف بدل).
الاقتراح
ننصحك باتّباع الممارسات التالية لتحسين سلوك المنبّه:
- راجِع مقالة اختيار نوع المنبّه للاختيار بين منبّه غير دقيق أو دقيق. إذا لم يكن المنبّه بحاجة إلى أن يكون دقيقًا، استخدِم المنبّهات غير الدقيقة لمنح النظام مزيدًا من المرونة في الجدولة، ما يمكن أن يحسّن عمر البطارية.
- ضَع في اعتبارك الحصص المفروضة على المنبّهات من قِبل النظام وصمِّم تطبيقك بحيث يلتزم بها.
- تجنَّب تنفيذ مهام طويلة في طريقة
onReceive()و جدولة المهام إذا كانت هناك حاجة إلى معالجة إضافية بعد المنبّه.
الصوت والوسائط
يمكن أن تكتسب واجهات برمجة تطبيقات الوسائط عمليات قفل التنشيط عند تسجيل الصوت أو تشغيله. تُنسب عمليات قفل التنشيط إلى التطبيق الذي يستدعيها.
أسماء عمليات قفل التنشيط
تكتسب واجهات برمجة تطبيقات الوسائط عمليات قفل التنشيط بأسماء مختلفة تبدأ بـ Audio:
AudioBitPerfect: تُستخدَم لتشغيل الصوت بدون فقدان البيانات من خلال USB.AudioDirectOut: تُستخدَم لتشغيل الصوت بدون فقدان البيانات على جهاز تلفزيون أو جهاز خاص.AudioDup: تُستخدَم لتشغيل الإشعارات أثناء الاتصال باستخدام البلوتوث أو USB.AudioIn: تُستخدَم لتسجيل الصوت في وضع كاميرا الفيديو أثناء تفعيل الميكروفون.AudioMix: تُستخدَم لتشغيل الصوت على جهاز شائع.AudioOffload: تُستخدَم لتشغيل الموسيقى فقط لفترة طويلة، وذلك للتطبيقات التي تتيح هذا الوضع.AudioSpatial: تُستخدَم لتشغيل الصوت متعدد القنوات للأفلام أو الموسيقى على الأجهزة التي تتيح الصوت المكاني.AudioUnknown: تُستخدَم عندما لا تنطبق الحالات الأخرى.MmapCapture: تُستخدَم لتسجيل الصوت بزمن انتقال منخفض.MmapPlayback: تُستخدَم لتشغيل الصوت بزمن انتقال منخفض، مثلاً للألعاب أو تطبيقات الصوت الاحترافية.
الاقتراح
ننصحك باتّباع الممارسات التالية:
- لا تُعلن عن أسماء عمليات قفل التنشيط التي تبدأ بـ
Audio. - إذا كنت تستخدم واجهات برمجة تطبيقات الوسائط، لن تحتاج إلى اكتساب عمليات قفل التنشيط مباشرةً، بل يمكنك الاعتماد على واجهات برمجة التطبيقات لاكتساب عمليات قفل التنشيط اللازمة لك.
- عند استخدام واجهات برمجة تطبيقات الوسائط، أنهِ جلسة الوسائط والخدمة المرتبطة بها التي تعمل في المقدّمة عندما لا تعود بحاجة إليها.
البلوتوث
تحتفظ واجهات برمجة تطبيقات البلوتوث في النظام الأساسي بشكل أساسي بعمليات قفل تنشيط النواة أثناء حدوث إجراءات البلوتوث، ولا تُنسب هذه العمليات إلى التطبيق.
الاقتراح
- استخدِم ميزة إقران الأجهزة المرافقة لإقران أجهزة البلوتوث لتجنُّب اكتساب عملية قفل تنشيط يدوية أثناء إقران البلوتوث.
- راجِع دليل التواصل في الخلفية لـ فهم كيفية إجراء عملية التواصل عبر البلوتوث في الخلفية.
- غالبًا ما يكون استخدام
WorkManagerكافيًا إذا لم يكن هناك أي تأثير على المستخدم بسبب تأخير عملية التواصل. إذا كان من الضروري استخدام عملية قفل تنشيط يدوية، احتفِظ بها فقط طوال مدة نشاط البلوتوث أو معالجة بيانات نشاط المستخدم.
أدوات الاستشعار في الجهاز
هناك عدة طرق لتتبُّع بيانات جهاز الاستشعار في الجهاز، مثل عدد الخطوات أو بيانات مقياس التسارع أو الجيروسكوب.
على Wear OS، استخدِم Wear Health Services للحصول على بيانات الجهاز، مثل الارتفاع ومعدّل نبضات القلب والمسافة المقطوعة.
إذا كانت التطبيقات الأخرى تجمع البيانات، يمكنك استخدام Health Connect مع WorkManager لاسترداد البيانات بشكل دوري.
بالنسبة إلى سيناريوهات مثل تتبُّع التغيير في عدد الخطوات أو المسافة المقطوعة، يمكنك استخدام Recording API على الأجهزة الجوّالة مع WorkManager لاسترداد البيانات بشكل دوري. للوصول إلى بيانات الخطوات السابقة (مثل إجمالي الخطوات اليومية أو الخطوات في آخر 6 ساعات)، تتيح Health Connect أيضًا تتبُّع الخطوات على الجهاز فقط للأجهزة التي تعمل بالإصدار Android 14 أو الإصدارات الأحدث.
في بعض الحالات، قد يكون من الضروري تتبُّع بيانات أدوات الاستشعار في الجهاز بشكل مخصّص باستخدام
SensorManager. SensorManager لا تكتسب
عمليات قفل التنشيط نيابةً عن التطبيق، إلا إذا كانت أداة الاستشعار هي أداة استشعار التنشيط،
والتي يمكن تحديدها باستخدام واجهة برمجة التطبيقات isWakeUpSensor.
الاقتراح
يمكن أن يؤدي استخدام أدوات الاستشعار للتسجيل بمعدّلات أخذ عيّنات عالية إلى استنزاف البطارية بشكل كبير. إليك اقتراحات لتقليل استنزاف البطارية واستخدام عمليات قفل التنشيط:
- إذا كنت تتتبّع عدد الخطوات أو المسافة المقطوعة، استخدِم الـ Recording API لتسجيل البيانات بطريقة موفّرة للبطارية. بالنسبة إلى الأجهزة التي تعمل بالإصدار Android 14 أو الإصدارات الأحدث، يمكنك استخدام Health Connect للوصول إلى بيانات الجهاز السابقة وإجمالي عدد الخطوات.
- لتتبُّع بيانات أدوات الاستشعار بشكل غير مباشر على Wear OS، استخدِم Wear Health Services لـ تحسين استخدام البطارية.
- عند تسجيل أداة استشعار باستخدام
SensorManager، حدِّدmaxReportLatencyUsلأكثر من 30 ثانية لاستخدام منطق تجميع بيانات أداة الاستشعار وتقليل عدد المقاطعات التي يتلقّاها التطبيق. عندما يتم تنشيط الجهاز لاحقًا من خلال مشغّل آخر، مثل تفاعل المستخدم أو استرداد الموقع الجغرافي أو مهمة مجدولة، سيرسل النظام على الفور بيانات جهاز الاستشعار المخزّنة مؤقتًا. - إذا كان تطبيقك يتطلّب بيانات الموقع الجغرافي وبيانات جهاز الاستشعار، يمكنك مزامنة استرداد الأحداث ومعالجتها. من خلال تجميع قراءات أداة الاستشعار في عملية قفل التنشيط القصيرة التي يحتفظ بها النظام لتحديثات الموقع الجغرافي، يمكنك تجنُّب الحاجة إلى عملية قفل تنشيط لإبقاء وحدة المعالجة المركزية نشطة. استخدِم مهمة أو عملية قفل تنشيط قصيرة المدة للتعامل مع تحميل هذه البيانات المجمّعة ومعالجتها.
خدمة المراسلة عبر السحابة الإلكترونية Firebase (FCM)
يتم اكتساب عملية قفل تنشيط أثناء تسليم بث لخدمة المراسلة عبر السحابة الإلكترونية Firebase (FCM) إلى التطبيق.
وتتم إزالة قفل التنشيط عند انتهاء تنفيذ طريقة
onMessageReceived() لبث FCM.
أسماء عمليات قفل التنشيط
عند تلقّي رسالة FCM على الجهاز، يتم الاحتفاظ بعملية قفل تنشيط قصيرة المدة باسم GOOGLE_C2DM. على الإصدار Android 16 والإصدارات الأحدث، يكون اسم قفل التنشيط هو GCM_MESSAGE.
الاقتراح
ننصحك باتّباع الممارسات التالية لتحسين سلوك FCM:
- حسِّن معدّل تكرار تسليم FCM.
- لا تستخدِم FCM ذات الأولوية العالية إلا إذا كانت الرسالة بحاجة إلى التسليم على الفور.
- أكمِل طريقة
onMessageReceived()بأسرع ما يمكن أو جدوِل مهمة لمواصلة المهمة إذا كانت هناك حاجة إلى معالجة إضافية. راجِع إرشادات Firebase لمزيد من المعلومات.
JobScheduler
تكتسب مهام JobScheduler عمليات قفل التنشيط أثناء تنفيذ المهام في الخلفية. تُنسب عمليات قفل التنشيط إلى التطبيق الذي أنشأ المهام.
أسماء عمليات قفل التنشيط
تعتمد أسماء عمليات قفل التنشيط التي تكتسبها JobScheduler على إصدار نظام Android الذي تعمل عليه، والغرض من المهمة.
العناصر المحاطة بأقواس معقوفة هي متغيرات. على سبيل المثال،
"<package_name>" هو اسم حزمة تطبيقك، وليس
النص الحرفي <package name>. ومع ذلك، فإنّ *job* هي سلسلة الأحرف *job*، مع علامات النجمة، ولا يتم استخدام علامات النجمة كأحرف بدل.
الإصدار Android 15 والإصدارات الأقدم
تنشئ المهام التي يبدأها المستخدم عمليات قفل تنشيط بأسماء تتّبع هذا النمط:
*job*u/@<name_space>@/<package_name>/<classname>
تستخدم المهام الأخرى هذا النمط:
*job*/@<name_space>@/<package_name>/<classname>
الإصدار Android 16 QPR2 والإصدارات الأحدث
تنشئ المهام التي يبدأها المستخدم عمليات قفل تنشيط بأسماء تتّبع هذا النمط:
*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
تستخدم المهام السريعة هذا النمط:
*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
تستخدم المهام العادية هذا النمط:
*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
مثال
لنفترض أنّ هناك مهمة مُعجَّلة مع مساحة الاسم backup وعلامة التتبُّع started. اسم الحزمة هو com.example.app، والفئة التي أنشأت المهمة هي com.backup.BackupFileService.
على الأجهزة التي تعمل بالإصدار Android 15 أو الإصدارات الأقدم، سيكون اسم قفل التنشيط هو:
*job*/@backup@/com.example.app/com.backup.BackupFileService
على الأجهزة التي تعمل بالإصدار Android 16 QPR2 أو الإصدارات الأحدث، سيكون اسم قفل التنشيط هو:
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
الاقتراح
- لا تكتسب عملية قفل تنشيط يدوية لحالات استخدام التنزيل أو التحميل التي يبدأها المستخدم. بدلاً من ذلك، استخدِم واجهة برمجة التطبيقات User-Initiated Data Transfer (UIDT). هذا هو المسار المحدّد لمهام نقل البيانات الطويلة التي يبدأها المستخدم.
- إذا حدّدت عمليات قفل تنشيط أنشأتها JobScheduler وتستخدم عمليات قفل التنشيط بشكل كبير، قد يرجع ذلك إلى أنّك أعددت مهمتك بشكل غير صحيح بحيث لا تكتمل في سيناريوهات معيّنة. ننصحك بتحليل أسباب إيقاف المهمة،
خاصةً إذا كنت ترى حالات كثيرة لـ
STOP_REASON_TIMEOUT. - راجِع استخدامك لمهام JobScheduler. على وجه الخصوص، اتّبِع إرشاداتنا لـ تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.
الموقع الجغرافي
LocationManager وFusedLocationProviderClient تستخدِم
عمليات قفل التنشيط لاكتساب موقع الجهاز وتسليمه. تُنسب عمليات قفل التنشيط إلى التطبيق الذي استدعى واجهات برمجة التطبيقات هذه.
أسماء عمليات قفل التنشيط
تستخدِم خدمات الموقع الجغرافي الأسماء التالية:
CollectionLib-SigCollectorNetworkLocationLocatorNetworkLocationScannerNlpCollectorWakeLockNlpWakeLock*location*
الاقتراح
- راجِع إرشاداتنا لـ تحسين استخدام الموقع الجغرافي. ننصحك بتنفيذ عمليات المهلة أو الاستفادة من تجميع طلبات الموقع الجغرافي أو استخدام تحديثات الموقع الجغرافي غير المباشرة.
- تجنَّب اكتساب عملية قفل تنشيط منفصلة ومستمرة لتخزين بيانات الموقع الجغرافي مؤقتًا، لأنّ ذلك غير ضروري ويجب إزالته.
عند طلب تحديثات الموقع الجغرافي باستخدام واجهات برمجة التطبيقات
FusedLocationProviderأوLocationManager، يؤدي النظام تلقائيًا إلى تنشيط الجهاز أثناء معاودة الاتصال بحدث الموقع الجغرافي. بدلاً من ذلك، خزِّن أحداث الموقع الجغرافي في الذاكرة أو مساحة التخزين، وعالِج أحداث الموقع الجغرافي بشكل دوري باستخدامWorkManager.
المراسلة عن بُعد
يناقش هذا القسم السيناريوهات التي تتضمّن المراسلة عن بُعد حيث قد تحتاج التطبيقات إلى الاحتفاظ بالاتصالات أو الردّ على الأحداث من الأجهزة الأخرى، ما قد يؤثر في استخدام عمليات قفل التنشيط. تشمل حالات الاستخدام الشائعة ما يلي:
- التطبيقات المرافقة لمراقبة الفيديو أو الصوت التي تحتاج إلى مراقبة الأحداث التي تحدث على جهاز خارجي متصل عبر شبكة محلية
- تطبيقات المراسلة التي تحتفظ باتصال مأخذ توصيل بالشبكة مع إصدار سطح المكتب
معظم عمليات التنشيط في سيناريوهات المراسلة عن بُعد هذه هي عمليات قفل تنشيط النواة. بما أنّ عمليات قفل تنشيط النواة لا تُنسب إلى التطبيق، لا توجد أسماء عمليات قفل تنشيط مرتبطة بها لإدراجها هنا.
الاقتراح
- إذا كان من الممكن معالجة أحداث الشبكة على جانب الخادم، استخدِم FCM لتلقّي المعلومات على جانب العميل. يمكنك اختيار جدولة مهمة سريعة إذا كانت هناك حاجة إلى معالجة إضافية لبيانات FCM.
- إذا كان يجب معالجة الأحداث على جانب العميل باستخدام اتصال مأخذ توصيل، لن تحتاج إلى عملية قفل تنشيط للاستماع إلى مقاطعات الأحداث. عند وصول حِزم البيانات إلى جهاز إرسال واستقبال Wi-Fi أو جهاز إرسال واستقبال بيانات الجوّال، يؤدي جهاز إرسال واستقبال البيانات إلى تشغيل مقاطعة على شكل عملية قفل تنشيط النواة. يمكنك بعد ذلك اختيار جدولة مهمة أو اكتساب عملية قفل تنشيط لمعالجة البيانات.
- على سبيل المثال، إذا كنت تستخدم
ktor-networkللاستماع إلى حِزم البيانات على مأخذ توصيل بالشبكة، يجب ألا تكتسب عملية قفل تنشيط إلا عند تسليم الحِزم إلى العميل.
WorkManager
تكتسب مهام WorkManager عمليات قفل التنشيط أثناء تنفيذ المهام في الخلفية. تُنسب عمليات قفل التنشيط إلى التطبيق الذي أنشأ المهام.
أسماء عمليات قفل التنشيط
تعتمد أسماء عمليات قفل التنشيط التي تكتسبها WorkManager على إصدار نظام Android الذي تعمل عليه.
الإصدار Android 15 والإصدارات الأقدم
تنشئ مهام WorkManager عمليات قفل تنشيط بأسماء تتّبع هذا النمط:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
الإصدار Android 16 QPR2 والإصدارات الأحدث
تنشئ المهام السريعة عمليات قفل تنشيط بأسماء تتّبع هذا النمط:
*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
تتّبع المهام العادية هذا النمط:
*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
تلقائيًا، يكون <trace_tag> هو اسم المهمة.
مثال
لنفترض أنّ هناك مهمة سريعة باسم BackupFileWorker. اسم الحزمة هو com.example.app.
على الأجهزة التي تعمل بالإصدار Android 15 أو الإصدارات الأقدم، سيكون اسم قفل التنشيط هو:
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
على الأجهزة التي تعمل بالإصدار Android 16 QPR2 أو الإصدارات الأحدث وتستخدم WorkManager 2.10.0+، سيكون اسم قفل التنشيط هو:
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
الاقتراح
- رقِّ إصدار WorkManager إلى أحدث إصدار ثابت لجعل علامات قفل التنشيط أكثر تفصيلاً على الإصدار Android 16 QPR2 أو الإصدارات الأحدث.
- راجِع استخدامك لمهام WorkManager. على وجه الخصوص، تأكَّد من أنّها تتّبع
إرشاداتنا لـ تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.
لجعل علامات قفل التنشيط أكثر تفصيلاً على الإصدار Android 16 QPR2 أو الإصدارات الأحدث، استخدِم طريقة
setTraceTagفي المهمة لإضافة مزيد من معلومات تصحيح الأخطاء ، مثل الفئة التي جدولت المهمة. - إذا حدّدت عمليات قفل تنشيط أنشأتها WorkManager وتستخدم عمليات قفل التنشيط بشكل كبير، قد يرجع ذلك إلى أنّك أعددت مهمتك بشكل غير صحيح بحيث لا تكتمل في سيناريوهات معيّنة. ننصحك بتحليل
أسباب إيقاف المهمة، خاصةً إذا كنت ترى
حالات كثيرة لـ
STOP_REASON_TIMEOUT. - بالإضافة إلى تسجيل أسباب إيقاف المهمة، راجِع مستنداتنا حول تصحيح أخطاء المهام. ننصحك أيضًا بجمع عمليات تتبُّع النظام وتحليلها لفهم متى يتم اكتساب عمليات قفل التنشيط وإزالتها.
_UNKNOWN
إذا اعتقدت أدوات تصحيح الأخطاء أنّ اسم قفل التنشيط يحتوي على معلومات تكشف الهوية الشخصية، لن تعرض اسم قفل التنشيط الفعلي. بدلاً من ذلك، ستصنّف قفل التنشيط على أنّه _UNKNOWN. على سبيل المثال، قد تفعل الأدوات ذلك إذا كان اسم قفل التنشيط يحتوي على عنوان بريد إلكتروني.
الاقتراح
اتّبِع أفضل الممارسات لتسمية عمليات قفل التنشيط، وتجنَّب استخدام معلومات تحديد الهوية الشخصية في اسم قفل التنشيط. إذا عثرت على عملية قفل تنشيط باسم _UNKNOWN تُنسب إلى تطبيقك، حاوِل تحديد عملية قفل التنشيط هذه ومنحها اسمًا مختلفًا.