تحديد عمليات قفل التنشيط التي أنشأتها واجهات برمجة تطبيقات أخرى

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

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

يتناول هذا المستند الحالات التي قد يتم فيها إنشاء أقفال التنشيط. في كل حالة، على الرغم من أنّ بعض المكتبات أو واجهات برمجة التطبيقات الأخرى قد تنشئ قفل التنشيط، يتم إسناد القفل إلى التطبيق الذي طلب واجهة برمجة التطبيقات هذه.

AlarmManager

يحصل AlarmManager على أقفال التنشيط ويُسندها إلى التطبيق الذي يطلبها. يحصل AlarmManager على قفل التنشيط عندما يرنّ المنبّه، ويحرر القفل عند انتهاء تنفيذ طريقة onReceive() لبث المنبّه.

أسماء عمليات قفل التنشيط

تنشئ AlarmManager أقفال تنشيط بالاسم *alarm*. (علامات النجمة جزء من اسم قفل التنشيط، ولا تمثّل أحرف بدل).

الاقتراح

ننصحك باتّباع الممارسات التالية لتحسين سلوك التنبيهات:

  • استخدِم AlarmManager لتحسين معدّل تكرار جدولة المنبّهات.
  • لا تستخدِم منبّهات RTC_WAKEUP (التي توقظ الجهاز) إلا عند الضرورة.
  • قلِّل من استخدام التنبيهات، وتجنَّب تنفيذ مهام طويلة في طريقة onReceive().

الصوت والوسائط

يمكن لواجهات برمجة التطبيقات الخاصة بالوسائط الحصول على أقفال التنشيط عند تسجيل الصوت أو تشغيله. يتم إسناد عمليات قفل التنشيط إلى تطبيق الاتصال.

أسماء عمليات قفل التنشيط

تكتسب واجهات برمجة التطبيقات الخاصة بالوسائط أقفال التنشيط بأسماء مختلفة تبدأ بـ Audio:

  • AudioBitPerfect: يُستخدَم لتشغيل الصوت عبر USB بدون فقدان جودته.
  • AudioDirectOut: تُستخدَم لتشغيل الصوت بدون فقدان جودته على التلفزيون أو جهاز خاص.
  • AudioDup: تُستخدم لتشغيل الإشعارات أثناء الاتصال عبر البلوتوث أو USB.
  • AudioIn: يُستخدَم لتسجيل الصوت في وضع كاميرا الفيديو عندما يكون الميكروفون نشطًا.
  • AudioMix: يُستخدَم لتشغيل الصوت على جهاز مشترك.
  • AudioOffload: يُستخدم لتشغيل الموسيقى فقط لفترة طويلة، وذلك للتطبيقات التي تتوافق مع هذا الوضع.
  • AudioSpatial: يُستخدم لتشغيل أفلام أو موسيقى بقنوات صوتية متعددة على الأجهزة التي تتوافق مع الصوت المكاني.
  • AudioUnknown: تُستخدَم عندما لا تنطبق الحالات الأخرى.
  • MmapCapture: يُستخدَم لتسجيل الصوت بزمن استجابة منخفض.
  • MmapPlayback: تُستخدَم لتشغيل المحتوى بزمن استجابة منخفض، مثلاً في الألعاب أو في تطبيقات الصوت الاحترافية.

الاقتراح

ننصحك باتّباع الممارسات التالية:

  • لا تستخدِم أسماء قفل التنشيط التي تبدأ بـ Audio.
  • إذا كنت تستخدم واجهات برمجة تطبيقات الوسائط، لن تحتاج إلى الحصول على أقفال التنشيط مباشرةً، بل يمكنك الاعتماد على واجهات برمجة التطبيقات للحصول على أقفال التنشيط اللازمة.
  • عند استخدام واجهات برمجة تطبيقات الوسائط، يجب إنهاء جلسة الوسائط عندما لا تعود بحاجة إليها.

خدمة المراسلة عبر السحابة الإلكترونية من Firebase‏ (FCM)

تحصل خدمة GCM على قفل تنبيه أثناء تسليم بث "رسالة عبر السحابة الإلكترونية من Firebase" (FCM) إلى التطبيق. ويتم إلغاء قفل التنبيه بعد انتهاء تنفيذ طريقة بث FCM onMessageReceived().

أسماء عمليات قفل التنشيط

يحصل GCM على قفل تنبيه باسم GOOGLE_C2DM.

الاقتراح

ننصحك باتّباع الممارسات التالية لتحسين سلوك FCM:

  • تحسين معدّل تكرار التسليم في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
  • لا تستخدِم رسائل FCM ذات الأولوية العالية إلا إذا كانت الرسالة بحاجة إلى أن يتم تسليمها على الفور.
  • إكمال عملية التحقّق من خلال طريقة onMessageReceived() في أسرع وقت ممكن يمكنك الاطّلاع على إرشادات Firebase للحصول على مزيد من المعلومات.

JobScheduler

تكتسب مهام JobScheduler عمليات قفل التنشيط أثناء تنفيذ المهام في الخلفية. يتم ربط عمليات قفل التنشيط بالتطبيق الذي أنشأ عمليات الخلفية.

أسماء عمليات قفل التنشيط

تعتمد أسماء أقفال التنشيط التي يكتسبها JobScheduler على إصدار نظام Android الذي يتم تشغيلها عليه، وعلى الغرض من المهمة.

العناصر المحاطة بأقواس معقوفة هي متغيرات. على سبيل المثال، "<package_name>" هو اسم حزمة تطبيقك، وليس النص الحرفي <package name>. ومع ذلك، فإنّ *job* هي تسلسل الأحرف *job*، مع علامات النجمة، ولا يتم استخدام علامات النجمة كأحرف بدل.

الإصدار 15 من نظام التشغيل Android والإصدارات الأقدم

تنشئ المهام التي يبدأها المستخدم أقفال تنبيه بأسماء تتّبع النمط التالي:

*job*u/@<name_space>@/<package_name>/<classname>

تستخدم الوظائف الأخرى هذا النمط:

*job*/@<name_space>@/<package_name>/<classname>
الإصدار 16 من نظام التشغيل Android والإصدارات الأحدث

تنشئ المهام التي يبدأها المستخدم أقفال تنبيه بأسماء تتّبع النمط التالي:

*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.

على الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android أو الإصدارات الأقدم، سيتم تسمية قفل التنشيط على النحو التالي:

*job*/@backup@/com.example.app/com.backup.BackupFileService

على الأجهزة التي تعمل بالإصدار 16 من نظام التشغيل Android أو إصدار أحدث، سيكون اسم قفل التنشيط كما يلي:

*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService

الاقتراح

راجِع استخدامك لمهام JobScheduler. على وجه الخصوص، اتّبِع إرشاداتنا بشأن تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.

الموقع الجغرافي

تستخدم LocationManager وFusedLocationProviderClient أقفال التنشيط للحصول على الموقع الجغرافي للجهاز وتقديمه. يتم تحديد مصدر عمليات التنشيط على أنّها التطبيق الذي استدعى واجهات برمجة التطبيقات هذه.

أسماء عمليات قفل التنشيط

تستخدم خدمات الموقع الجغرافي الأسماء التالية:

  • CollectionLib-SigCollector
  • NetworkLocationLocator
  • NetworkLocationScanner
  • NlpCollectorWakeLock
  • NlpWakeLock
  • *location*

الاقتراح

تحسين استخدام الموقع الجغرافي على سبيل المثال، يمكنك ضبط مهلات زمنية أو تجميع طلبات الموقع الجغرافي أو استخدام تعديلات الموقع الجغرافي غير النشطة.

WorkManager

تكتسب عمليات WorkManager قفل تنشيط أثناء تنفيذ المهام في الخلفية. يتم ربط عمليات قفل التنشيط بالتطبيق الذي أنشأ عمليات الخلفية.

أسماء عمليات قفل التنشيط

تعتمد أسماء أقفال التنشيط التي يحصل عليها WorkManager على إصدار نظام Android الذي يتم تشغيله عليه.

الإصدار 15 من نظام التشغيل Android والإصدارات الأقدم

تنشئ مهام WorkManager أقفال تنشيط بأسماء تتّبع النمط التالي:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
الإصدار 16 من نظام التشغيل Android والإصدارات الأحدث

تنشئ المهام المعجَّلة أقفال تنبيه تحمل أسماءً تتّبع النمط التالي:

*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.

على الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android أو الإصدارات الأقدم، سيتم تسمية قفل التنشيط على النحو التالي:

*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

على الأجهزة التي تعمل بالإصدار 16 من نظام التشغيل Android أو إصدار أحدث، سيكون اسم قفل التنشيط كما يلي:

*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

الاقتراح

راجِع استخدامك لبرامج WorkManager. على وجه الخصوص، اتّبِع إرشاداتنا بشأن تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.

_UNKNOWN

إذا رصدت أدوات تصحيح الأخطاء أنّ اسم قفل التنشيط يتضمّن معلومات تحديد الهوية الشخصية، لن تعرض اسم قفل التنشيط الفعلي. بدلاً من ذلك، يتم تصنيف قفل التنشيط على أنّه _UNKNOWN. على سبيل المثال، قد تفعل الأدوات ذلك إذا كان اسم قفل التنشيط يتضمّن عنوان بريد إلكتروني.

الاقتراح

اتّبِع أفضل الممارسات لتسمية أقفال التنشيط، وتجنَّب استخدام معلومات تحديد الهوية الشخصية في اسم قفل التنشيط. إذا عثرت على قفل تنبيه باسم _UNKNOWN مرتبط بتطبيقك، حاوِل تحديد قفل التنبيه هذا ومنحه اسمًا مختلفًا.