تحسين أداء بطارية تطبيقك باستخدام مقياس عمليات قفل التنشيط في "مؤشرات Android الحيوية"
مدّة القراءة: 7 دقائق
يُعدّ عمر البطارية جانبًا مهمًا من تجربة المستخدم، وتؤدي أقفال التنشيط دورًا رئيسيًا في ذلك. هل تستخدمها بشكل مفرط؟ في مشاركة المدونة هذه، سنتناول مفهوم أقفال التنشيط، وأفضل الممارسات لاستخدامها، وكيفية فهم سلوك تطبيقك بشكل أفضل باستخدام مقياس Play Console.
الاستخدام المفرط لعمليات قفل التنشيط الجزئي في "مؤشرات Android الحيوية"
تتتبّع Play Console الآن استنزاف البطارية، مع التركيز على الاستخدام المفرط لعمليات قفل التنشيط الجزئي، كمؤشر أداء رئيسي.
تزيد هذه الميزة من أهمية كفاءة البطارية إلى جانب مؤشرات ثبات المقاييس الأساسية الحالية: الأعطال وأخطاء ANR الزائدة عن الحد التي لاحظها المستخدم. وضعنا معيارًا لتحديد الأداء السيئ المتعلق بعمليات قفل التنشيط الزائدة عن الحد. اعتبارًا من 1 مارس 2026، إذا لم يستوفِ المحتوى هذا الحد الأدنى للجودة، قد نستبعده من مساحات العرض البارزة، مثل الاقتراحات. في بعض الحالات، قد نعرض تحذيرًا في بطاقة بيانات المتجر لإعلام المستخدمين بأنّ تطبيقك قد يؤدي إلى استنزاف البطارية بشكل مفرط.
التحذير من الاستخدام المفرط لأقفال التنشيط في نظرة عامة على مؤشرات Android الحيوية.
بالنسبة إلى الأجهزة الجوّالة، ينطبق مقياس "مؤشرات Android الحيوية" على عمليات قفل التنشيط غير المعفاة التي يتم الحصول عليها عندما تكون الشاشة مطفأة ويكون التطبيق مُشغَّلاً في الخلفية أو يشغّل خدمة تعمل في المقدّمة. تعتبر "مؤشرات Android الحيوية" استخدام عمليات قفل التنشيط الجزئي بشكل مفرط في الحالات التالية:
- يتم الاحتفاظ بأقفال التنشيط لمدة ساعتين على الأقل خلال فترة 24 ساعة.
- يؤثّر في أكثر من% 5 من جلسات تطبيقك، وذلك على مدار 28 يومًا.
يتم استثناء عمليات قفل التنشيط التي تم إنشاؤها بواسطة واجهات برمجة التطبيقات التي يبدأها المستخدمون في الصوت والموقع الجغرافي وJobScheduler من عملية احتساب عمليات قفل التنشيط.
التعرّف على أقفال التنشيط
قفل التنشيط هو آلية تتيح لأحد التطبيقات إبقاء وحدة المعالجة المركزية (CPU) للجهاز قيد التشغيل حتى عندما لا يتفاعل المستخدم معه بشكل نشط.
يُبقي قفل التنشيط الجزئي وحدة المعالجة المركزية (CPU) قيد التشغيل حتى إذا كانت الشاشة مطفأة، ما يمنع وحدة المعالجة المركزية من الدخول في حالة "تعليق" منخفضة الطاقة. يُبقي قفل التنشيط الكامل الشاشة ووحدة المعالجة المركزية قيد التشغيل.
تتوفّر طريقتان للحصول على أقفال التنشيط الجزئي:
- يحصل التطبيق على قفل التنشيط ويحرّره يدويًا باستخدام واجهات برمجة التطبيقات PowerManager لحالة استخدام معيّنة، وغالبًا ما يتم الحصول عليه بالتزامن مع خدمة تعمل في المقدّمة، وهي واجهة برمجة تطبيقات لدورة حياة النظام الأساسي مخصّصة للعمليات التي يمكن للمستخدم إدراكها.
- بدلاً من ذلك، يتم الحصول على قفل التنشيط من خلال واجهة برمجة تطبيقات أخرى، ويتم إسناده إلى التطبيق بسبب استخدام واجهة برمجة التطبيقات، ويمكنك الاطّلاع على مزيد من المعلومات حول ذلك في قسم أفضل الممارسات.
في حين أنّ أقفال التنشيط ضرورية لإكمال مهام مثل تنزيل ملف كبير بدأه المستخدم، يمكن أن يؤدي الاستخدام المفرط أو غير السليم لها إلى استنزاف البطارية بشكل كبير. لقد رصدنا حالات تحتفظ فيها التطبيقات بأقفال التنشيط لساعات أو لا تحرّرها بشكل صحيح، ما يؤدي إلى شكاوى المستخدمين بشأن استنزاف البطارية بشكل كبير حتى عندما لا يتفاعلون مع التطبيق.
أفضل الممارسات لاستخدام أداة Wake Lock
قبل أن نتناول كيفية تصحيح أخطاء الاستخدام المفرط لأقفال التنشيط، تأكَّد من اتّباع أفضل الممارسات المتعلّقة بأقفال التنشيط.
ضَع في اعتبارك هذه الأسئلة الأربعة المهمة.
1. هل فكّرت في خيارات بديلة لقفل التنشيط؟
قبل التفكير في الحصول على قفل تنبيه جزئي يدوي، اتّبِع مخطط اتّخاذ القرار التالي:
مخطط انسيابي لتحديد وقت الحصول على قفل التنشيط يدويًا
- هل يجب أن تبقى الشاشة مفعّلة؟
- نعم، يُرجى الرجوع إلى مستندات الإبقاء على الشاشة مفعّلة بدلاً من ذلك
- هل يشغّل التطبيق خدمة تعمل في المقدّمة؟
- لا، لست بحاجة إلى الحصول على قفل التنشيط يدويًا.
- هل يؤدي تعليق الجهاز إلى الإضرار بتجربة المستخدم؟
- لا: على سبيل المثال، لا يتطلّب تعديل إشعار بعد تنشيط الجهاز قفل تنشيط.
- نعم: إذا كان من الضروري منع الجهاز من التعليق، مثل التواصل المستمر مع جهاز خارجي، يمكنك المتابعة.
- هل هناك واجهة برمجة تطبيقات حالية تبقي الجهاز نشطًا نيابةً عنك؟
- يمكنك الاستفادة من المستندات تحديد عمليات قفل التنشيط التي أنشأتها واجهات برمجة تطبيقات أخرى لتحديد السيناريوهات التي يتم فيها إنشاء عمليات قفل تنشيط من خلال واجهات برمجة تطبيقات أخرى، مثل LocationManager.
- إذا لم تكن هناك أي واجهات برمجة تطبيقات، انتقِل إلى السؤال الأخير.
- إذا أجبت عن كل هذه الأسئلة وتبيّن لك أنّه لا يوجد بديل، عليك المتابعة والحصول على قفل التنشيط يدويًا.
2. هل تسمّي قفل التنشيط بشكل صحيح؟
عند الحصول على أقفال التنشيط يدويًا، من المهم تسميتها بشكل صحيح لتسهيل عملية تصحيح الأخطاء:
- لا تُدرِج أي معلومات تكشف الهوية الشخصية (PII) في الاسم، مثل عناوين البريد الإلكتروني. في حال رصد معلومات تعريف شخصية، يتم تسجيل قفل التنشيط على أنّه
_UNKNOWN، ما يعيق عملية تصحيح الأخطاء. - لا تسمِّ قفل التنشيط آليًا باستخدام أسماء الفئات أو الطرق، لأنّ هذه الأسماء يمكن أن يتم تشويشها باستخدام أدوات مثل Proguard. بدلاً من ذلك، استخدِم سلسلة مبرمَجة.
- لا تُضِف عدّادات أو معرّفات فريدة إلى علامات قفل التنشيط. يجب استخدام العلامة نفسها في كل مرة يتم فيها تشغيل قفل التنشيط للسماح للنظام بتجميع الاستخدام حسب الاسم، ما يسهّل رصد السلوك غير الطبيعي.
3. هل يتم دائمًا إيقاف قفل التنشيط الذي تم الحصول عليه؟
إذا كنت بصدد الحصول على قفل تنشيط يدويًا، تأكَّد من تنفيذ عملية إلغاء قفل التنشيط دائمًا. قد يؤدي عدم إيقاف قفل التنشيط إلى استنزاف البطارية بشكل كبير.
على سبيل المثال، إذا تم طرح استثناء غير معالج أثناء processingWork()، قد لا يتم تنفيذ استدعاء release() أبدًا. بدلاً من ذلك، يمكنك استخدام كتلة try-finally لضمان تحرير قفل التنشيط، حتى إذا حدث استثناء.
بالإضافة إلى ذلك، يمكنك إضافة مهلة إلى قفل التنشيط لضمان إطلاقه بعد فترة زمنية محدّدة، ما يمنع الاحتفاظ به إلى أجل غير مسمى.
fun processingWork() {
wakeLock.apply {
try {
acquire(60 * 10 * 1000) // timeout after 10 minutes
doTheWork()
} finally {
release()
}
}
}4. هل يمكن تقليل عدد مرات التنشيط؟
بالنسبة إلى طلبات البيانات الدورية، يُعدّ تقليل عدد مرات تنبيه تطبيقك للجهاز أمرًا أساسيًا لتوفير استهلاك البطارية. في ما يلي بعض الأمثلة على تقليل عدد مرات التنشيط:
- WorkManager: زيادة الفاصل الزمني الدوري في PeriodicWorkRequests
- SensorManager: يمكنك الاستفادة من ميزة تجميع البيانات عن طريق تحديد maxReportLatencyMs عند تسجيل أداة الاستماع.
- Fused Location Provider:
- تقليل عدد مرات استرجاع الموقع الجغرافي باستخدام getLastLocation للحصول على أحدث موقع جغرافي مخزَّن مؤقتًا
- استخدِم setPriority(PRIORITY_PASSIVE) للحصول على طريقة تحديث أقل استهلاكًا للبطارية.
- يمكنك أيضًا الاستفادة من آلية تجميع المواقع الجغرافية عن طريق ضبط الحدّ الأدنى لفاصل التعديل الزمني باستخدام setMinUpdateIntervalMillis.
يمكنك الاطّلاع على مزيد من التفاصيل في مستند أفضل ممارسات قفل التنشيط.
تصحيح أخطاء الاستخدام المفرط لأقفال التنشيط
حتى مع أفضل النوايا، يمكن أن يحدث استخدام مفرط لقفل التنشيط. إذا تم الإبلاغ عن تطبيقك في Play Console، إليك كيفية تصحيح أخطائه:
تحديد الهوية الأولي باستخدام Play Console
تقدّم لوحة بيانات "مؤشرات Android الحيوية" الخاصة بعمليات قفل التنشيط الجزئي الزائدة عن الحد تفاصيل عن أسماء عمليات قفل التنشيط غير المعفاة المرتبطة بتطبيقك، مع عرض الجلسات والمدد المتأثرة. تذكير باستخدام المستندات لمساعدتك في تحديد ما إذا كان اسم قفل التنشيط يخص التطبيق أو واجهة برمجة تطبيقات أخرى.
تم الانتقال إلى أسفل لوحة بيانات "عمليات قفل التنشيط الجزئي الزائدة عن الحد" في "مؤشرات Android الحيوية" إلى قسم "التصنيفات" لعرض علامات عمليات قفل التنشيط الزائدة عن الحد.
تصحيح الأخطاء في أقفال التنشيط المفرطة التي تحتفظ بها العمليات/المهام
يمكنك تحديد أقفال التنشيط التي يحتفظ بها العامل باستخدام اسم قفل التنشيط هذا:
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
تتوفّر القائمة الكاملة بأنواع أسماء أقفال التنشيط التي يحتفظ بها العامل في المستندات. لتصحيح أخطاء عمليات قفل التنشيط هذه، يمكنك استخدام "أداة فحص المهام في الخلفية" لتصحيح الأخطاء محليًا، أو الاستفادة من getStopReason لتصحيح الأخطاء في بيئة التشغيل.
أداة فحص المهام في الخلفية في "استوديو Android"
لقطة شاشة لأداة فحص المهام في الخلفية، حيث تمكّنت من تحديد منفِّذ باسم WeatherSyncWorker تمت إعادة محاولته بشكل متكرّر وتعذّر تنفيذه.
لتصحيح الأخطاء في WorkManager محليًا، استخدِم هذه الأداة على محاكي أو جهاز متصل (المستوى 26 من واجهة برمجة التطبيقات أو أعلى). تعرض الأداة قائمة بالعاملين وحالاتهم (تم الانتهاء، قيد التنفيذ، في قائمة الانتظار)، ما يتيح لك فحص التفاصيل وفهم سلاسل العاملين.
على سبيل المثال، يمكن أن يكشف ذلك عمّا إذا كان أحد المنفّذين يتعذّر عليه إكمال المهام أو يعيد محاولة إكمالها بشكل متكرر بسبب القيود المفروضة على النظام.
يمكنك الاطّلاع على مستندات "أداة فحص المهام في الخلفية" للحصول على مزيد من التفاصيل.
WorkManager getStopReason
لتصحيح أخطاء العمال الذين يستخدمون عمليات قفل التنشيط بشكل مفرط في الحقل، استخدِم WorkInfo.getStopReason() في WorkManager 2.9.0 أو إصدار أحدث أو JobParameters.getStopReason() المتاح في حزمة تطوير البرامج (SDK) 31 أو إصدار أحدث لـ JobScheduler.
تساعد واجهة برمجة التطبيقات هذه في تسجيل سبب توقّف العامل (مثل STOP_REASON_TIMEOUT أو STOP_REASON_QUOTA)، وتحديد المشاكل مثل انتهاء المهلة بشكل متكرّر بسبب استنفاد مدة وقت التشغيل.
backgroundScope.launch {
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(workRequest.id)
.collect { workInfo ->
logStopReason(workRequest.id, workInfo?.stopReason)
}
}يمكنك الاطّلاع على تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام للحصول على مزيد من التفاصيل.
تصحيح الأخطاء في الأنواع الأخرى من عمليات قفل التنشيط الزائدة عن الحد
بالنسبة إلى السيناريوهات الأكثر تعقيدًا التي تتضمّن عمليات قفل تنشيط يتم إجراؤها يدويًا أو واجهات برمجة تطبيقات تحتفظ بقفل التنشيط، ننصحك باستخدام ميزة جمع بيانات تتبُّع النظام لتصحيح الأخطاء.
تجميع بيانات تتبُّع النظام
تتبُّع نشاط النظام هو أداة فعّالة لتصحيح الأخطاء تسجّل سجلاً تفصيليًا لنشاط النظام على مدار فترة زمنية، وتقدّم إحصاءات عن حالة وحدة المعالجة المركزية ونشاط سلسلة التعليمات ونشاط الشبكة والمقاييس المتعلّقة بالبطارية، مثل مدة المهمة واستخدام قفل التنشيط.
يمكنك تسجيل تتبُّع النظام باستخدام عدة طرق:
- استخدام أداة سطر الأوامر لتتبُّع النظام
- استخدام أداة تحليل وحدة المعالجة المركزية في "استوديو Android"
- استخدام واجهة مستخدم Perfetto
- تسجيل بيانات التتبُّع يدويًا على الجهاز مباشرةً من خيارات المطوّرين
فعِّل فئة Atrace "power:PowerManagement" في واجهة مستخدم Perfetto ضِمن علامة التبويب "تطبيقات وخدمات Android".
بغض النظر عن الطريقة التي تختارها، من الضروري التأكّد من أنّك تجمع فئة Atrace "power:PowerManagement" لتتمكّن من عرض مسارات حالة الجهاز.
فحص واجهة مستخدم Perfetto وتحليل SQL
يمكن فتح عمليات تتبُّع النظام وفحصها في واجهة مستخدم Perfetto. عند فتح التتبُّع، سيظهر لك تمثيل مرئي لمختلف العمليات على مخطط زمني. إنّ المقاييس التي سنركّز عليها في هذا الدليل هي تلك الواردة ضمن "حالة الجهاز".
ثبِّت المقاييس ضمن "حالة الجهاز"، مثل "أهم تطبيق" و"حالة الشاشة" و"أقفال التنشيط الطويلة" و"المهام" لتحديد شرائح أقفال التنشيط الطويلة بشكل مرئي.
تعرض كلّ فقرة اسم الحدث ووقت بدئه وانتهائه. في Perfetto، يُطلق على ذلك اسم "شريحة".
لتحليل قابل للتوسيع لعمليات تتبُّع متعددة، يمكنك استخدام تحليل SQL في Perfetto. يمكن أن يعثر استعلام SQL على جميع عمليات قفل التنشيط مرتّبة حسب المدة، ما يساعد في تحديد أهم العوامل المساهمة في الاستخدام المفرط.
في ما يلي مثال على طلب بحث يجمع كل علامات قفل التنشيط التي حدثت في تتبُّع النظام، ويتم ترتيبها حسب المدة الإجمالية:
SELECT slice.name as name, track.name as track_name,SUM(dur / 100000) as total_dur_ms FROM slice JOIN track ON slice.track_id = track.id WHERE track.name = 'WakeLocks'GROUP BY slice.name, track.name ORDER BY total_dur_ms DESC
استخدام ProfilingManager لجمع عمليات التتبُّع داخل الحقل
بالنسبة إلى المشاكل التي يصعب إعادة إنتاجها، ProfilingManager (التي تمت إضافتها في حزمة SDK 35) هي واجهة برمجة تطبيقات آلية تتيح للمطوّرين جمع عمليات تتبُّع النظام في المجال باستخدام مشغّلات البدء والانتهاء. ويوفّر هذا الخيار المزيد من التحكّم في نقاط التشغيل والانتهاء لعملية جمع الملفات الشخصية، ويفرض قيودًا على عدد مرات جمع البيانات على مستوى النظام لمنع التأثير في أداء الجهاز.
راجِع مستندات ProfilingManager لمعرفة المزيد من الخطوات حول كيفية تنفيذ عملية جمع بيانات تتبُّع النظام في الحقل، بما في ذلك كيفية تسجيل عملية تتبُّع برمجيًا وتحليل بيانات إنشاء الملفات الشخصية واستخدام أوامر تصحيح الأخطاء المحلية.
ستبدو عمليات التتبُّع التي يتم جمعها باستخدام ProfilingManager مشابهة لتلك التي يتم جمعها يدويًا، ولكن سيتم إخفاء عمليات النظام وعمليات التطبيقات الأخرى من عملية التتبُّع.
الخاتمة
إنّ مقياس عمليات قفل التنشيط الجزئي بشكل مفرط في "مؤشرات Android الحيوية" هو جزء صغير فقط من التزامنا المستمر بمساعدة المطوّرين في الحدّ من استنزاف البطارية وتحسين جودة التطبيقات.
من خلال فهم أقفال التنشيط واستخدامها بشكل صحيح، يمكنك تحسين أداء تطبيقك من حيث استهلاك البطارية بشكل كبير. يُعدّ الاستفادة من واجهات برمجة التطبيقات البديلة والالتزام بأفضل ممارسات قفل التنشيط واستخدام أدوات تصحيح الأخطاء الفعّالة، مثل "أداة فحص المهام في الخلفية" وعمليات تتبُّع النظام وProfilingManager، من العوامل الأساسية لضمان نجاح تطبيقك على Google Play.
-
أخبار المنتجاتعلى Google Play، نعمل باستمرار على توسيع منصة الاشتراكات لمساعدتك في تعزيز النمو والتكيّف مع نماذج الأعمال الجديدة وتلبية احتياجات المستخدمين أينما كانوا.
Sheenam Mittal • مدّة القراءة: 4 دقائق -
أخبار المنتجاتفي العام الماضي، أصبح بإمكان "استوديو Android" استخدام أي نموذج للذكاء الاصطناعي. واليوم، نتّخذ الخطوة التالية من خلال توفير إمكانية اختيار وكلاء الترميز.
Matthew Warner • مدّة القراءة: 3 دقائق -
أخبار المنتجاتتقدّم Googlebook فئة جديدة من أجهزة الكمبيوتر المحمول المستندة إلى أساس Android المشترك. تجمع أجهزة Chromebook Plus بين سهولة استخدام الأجهزة الجوّالة وقوة أجهزة الكمبيوتر المكتبي، وهي مزوّدة بأجهزة عالية الأداء من شركاء مثل HP وDell وLenovo وAcer وAsus.
Fahd Imtiaz, Loryn Hairston • مدّة القراءة: 4 دقائق
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.