أخبار المنتجات
تحسين بطارية تطبيقك باستخدام مقياس قفل التنشيط في "مؤشرات Android الحيوية"
قراءة لمدة 7 دقائق
يُعدّ عمر البطارية جانبًا مهمًا في تجربة المستخدم، وتؤدي عمليات قفل التنشيط دورًا رئيسيًا في ذلك. هل تستخدمها بشكل مفرط؟ في منشور المدونة هذا، سنستكشف ما هي عمليات قفل التنشيط، وما هي بعض أفضل الممارسات لاستخدامها، وكيف يمكنك فهم سلوك تطبيقك بشكل أفضل باستخدام مقياس Play Console.
الاستخدام المفرط لعمليات قفل التنشيط الجزئي في "مؤشرات Android الحيوية"
يراقب Play Console الآن استنزاف البطارية، مع التركيز على الاستخدام المفرط لعمليات قفل التنشيط الجزئي كمؤشر أداء رئيسي.
تزيد هذه الميزة من أهمية كفاءة البطارية إلى جانب مؤشرات استقرار المقياس الأساسي الحالية: الأعطال التي يلاحظها المستخدمون بشكل مفرط وأخطاء التطبيق التي لا يستجيب. لقد وضعنا معيارًا لتحديد الأداء السيئ من حيث عمليات قفل التنشيط بشكل مفرط. اعتبارًا من 1 مارس 2026، إذا لم يستوفِ عنوان تطبيقك معيار الجودة هذا، قد نستبعده من أسطح العرض البارزة، مثل الاقتراحات. في بعض الحالات، قد نعرض تحذيرًا في بطاقة بيانات المتجر لإعلام المستخدمين بأنّ تطبيقك قد يؤدي إلى استنزاف البطارية بشكل مفرط.
تحذير بشأن عمليات قفل التنشيط بشكل مفرط في نظرة عامة على مؤشرات Android الحيوية.
بالنسبة إلى الأجهزة الجوّالة، ينطبق مقياس "مؤشرات Android الحيوية" على عمليات قفل التنشيط غير المستثناة التي يتم الحصول عليها أثناء إيقاف تشغيل الشاشة وتشغيل التطبيق في الخلفية أو تشغيل خدمة تعمل في المقدّمة. تعتبر "مؤشرات Android الحيوية" أنّ استخدام عمليات قفل التنشيط الجزئي مفرط إذا:
- تم الاحتفاظ بعمليات قفل التنشيط لمدة ساعتين على الأقل خلال فترة 24 ساعة.
- أثّر ذلك في أكثر من% 5 من جلسات تطبيقك، بمتوسط على مدار 28 يومًا.
يتم استثناء عمليات قفل التنشيط التي أنشأتها واجهات برمجة التطبيقات التي يبدأها المستخدمون لـ الصوت والموقع الجغرافي وJobScheduler من عملية احتساب عمليات قفل التنشيط.
فهم عمليات قفل التنشيط
عملية قفل التنشيط هي آلية تسمح لتطبيق بإبقاء وحدة المعالجة المركزية (CPU) للجهاز قيد التشغيل حتى عندما لا يتفاعل المستخدم معها بشكل نشط.
تحافظ عملية قفل التنشيط الجزئي على تشغيل وحدة المعالجة المركزية (CPU) حتى إذا كانت الشاشة متوقفة، ما يمنع وحدة المعالجة المركزية (CPU) من الدخول في حالة "تعليق" منخفضة الطاقة. تحافظ عملية قفل التنشيط الكامل على تشغيل الشاشة ووحدة المعالجة المركزية (CPU).
هناك طريقتان للحصول على عمليات قفل التنشيط الجزئي:
- يحصل التطبيق على عملية قفل التنشيط ويحرّرها يدويًا باستخدام واجهات برمجة تطبيقات PowerManager لحالة استخدام معيّنة، وغالبًا ما يتم الحصول عليها بالتزامن مع خدمة تعمل في المقدّمة، وهي واجهة برمجة تطبيقات لدورة حياة المنصة مخصصة للعمليات التي يلاحظها المستخدمون.
- بدلاً من ذلك، تحصل واجهة برمجة تطبيقات أخرى على عملية قفل التنشيط، ويتم إسنادها إلى التطبيق بسبب استخدام واجهة برمجة التطبيقات، ويمكنك الاطّلاع على مزيد من المعلومات حول ذلك في قسم أفضل الممارسات.
على الرغم من أنّ عمليات قفل التنشيط ضرورية لمهام مثل إكمال عملية تنزيل ملف كبير بدأها المستخدم، فإنّ الاستخدام المفرط أو غير السليم لها يمكن أن يؤدي إلى استنزاف كبير للبطارية. لقد رصدنا حالات تحتفظ فيها التطبيقات بعمليات قفل التنشيط لساعات أو لا تحرّرها بشكل صحيح، ما يؤدي إلى شكاوى المستخدمين بشأن استنزاف البطارية بشكل كبير حتى عندما لا يتفاعلون مع التطبيق.
أفضل الممارسات لاستخدام عمليات قفل التنشيط
قبل أن ننتقل إلى كيفية تصحيح أخطاء الاستخدام المفرط لعمليات قفل التنشيط، تأكّد من اتّباع أفضل الممارسات المتعلقة بعمليات قفل التنشيط.
ضَع هذه الأسئلة الأربعة المهمة في الاعتبار.
1. هل وضعت في اعتبارك خيارات بديلة لعمليات قفل التنشيط؟
قبل التفكير في الحصول على عملية قفل تنشيط جزئي يدويًا، اتّبِع مخطط اتخاذ القرار التالي:
مخطط انسيابي لتحديد متى يتم الحصول على عملية قفل تنشيط يدويًا
- هل يجب إبقاء الشاشة قيد التشغيل؟
- نعم: يُرجى الرجوع بدلاً من ذلك إلى مستندات إبقاء الشاشة قيد التشغيل
- هل يشغّل التطبيق خدمة تعمل في المقدّمة؟
- لا: لست بحاجة إلى الحصول على عملية قفل تنشيط يدويًا.
- هل سيؤدي تعليق الجهاز إلى الإضرار بتجربة المستخدم؟
- لا: على سبيل المثال، لا يتطلب تعديل إشعار بعد استئناف الجهاز عملية قفل تنشيط.
- نعم: إذا كان من الضروري منع الجهاز من التعليق، مثل التواصل المستمر مع جهاز خارجي، يمكنك المتابعة.
- هل هناك حاليًا واجهة برمجة تطبيقات تبقي الجهاز قيد التشغيل نيابةً عنك؟
- يمكنك الاستفادة من مستندات تحديد عمليات قفل التنشيط التي أنشأتها واجهات برمجة تطبيقات أخرى لتحديد السيناريوهات التي يتم فيها إنشاء عمليات قفل التنشيط بواسطة واجهات برمجة تطبيقات أخرى، مثل LocationManager.
- إذا لم تكن هناك أي واجهات برمجة تطبيقات، انتقِل إلى السؤال الأخير.
- إذا أجبت عن كل هذه الأسئلة وتبيّن لك أنّه لا يوجد بديل، عليك المتابعة والحصول على عملية قفل تنشيط يدويًا.
2. هل تسمّي عملية قفل التنشيط بشكل صحيح؟
عند الحصول على عمليات قفل التنشيط يدويًا، من المهم تسميتها بشكل صحيح لتصحيح الأخطاء:
- لا تُدرِج أي معلومات تكشف الهوية الشخصية في الاسم، مثل عناوين البريد الإلكتروني. إذا تم رصد معلومات تكشف الهوية الشخصية، يتم تسجيل عملية قفل التنشيط على أنّها
_UNKNOWN، ما يعيق عملية تصحيح الأخطاء. - لا تسمِّ عملية قفل التنشيط آليًا باستخدام أسماء الفئات أو الطرق، لأنّ هذه الأسماء يمكن أن يتم إخفاؤها بواسطة أدوات مثل Proguard. بدلاً من ذلك، استخدِم سلسلة مرمّزة.
- لا تُضِف عدّادات أو معرّفات فريدة إلى علامات قفل التنشيط. يجب استخدام العلامة نفسها في كل مرة يتم فيها تشغيل عملية قفل التنشيط للسماح للنظام بتجميع بيانات الاستخدام حسب الاسم، ما يسهّل رصد السلوك غير الطبيعي.
3. هل يتم تحرير عملية قفل التنشيط التي تم الحصول عليها دائمًا؟
إذا كنت تحصل على عملية قفل تنشيط يدويًا، تأكّد من تنفيذ عملية تحرير قفل التنشيط دائمًا. يمكن أن يؤدي عدم تحرير قفل التنشيط إلى استنزاف كبير للبطارية.
على سبيل المثال، إذا تم طرح استثناء لم يتم رصده أثناء معالجة work()، قد لا يتم استدعاء 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() على JobScheduler المتوفّر على حزمة SDK 31 أو أعلى.
تساعد واجهة برمجة التطبيقات هذه في تسجيل سبب توقّف العامل (مثل STOP_REASON_TIMEOUT أو STOP_REASON_QUOTA)، ما يحدّد المشاكل مثل المهلات المتكررة بسبب استنفاد مدة وقت التشغيل.
backgroundScope.launch {
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(workRequest.id)
.collect { workInfo ->
logStopReason(workRequest.id, workInfo?.stopReason)
}
}يمكنك الاطّلاع على مزيد من التفاصيل في تحسين استخدام البطارية لواجهات برمجة تطبيقات جدولة المهام.
تصحيح أخطاء الأنواع الأخرى من عمليات قفل التنشيط بشكل مفرط
بالنسبة إلى السيناريوهات الأكثر تعقيدًا التي تتضمّن عمليات قفل تنشيط يتم الاحتفاظ بها يدويًا أو واجهات برمجة تطبيقات تحتفظ بعملية قفل التنشيط، ننصحك باستخدام تجميع بيانات آثار الأنشطة على مستوى النظام لتصحيح الأخطاء.
تجميع بيانات آثار الأنشطة على مستوى النظام
تتبُّع النظام هو أداة قوية لتصحيح الأخطاء تسجّل سجلّاً مفصّلاً لنشاط النظام على مدار فترة معيّنة، ما يقدّم إحصاءات حول حالة وحدة المعالجة المركزية (CPU) ونشاط سلسلة المحادثات ونشاط الشبكة والمقاييس المتعلقة بالبطارية، مثل مدة المهمة واستخدام عمليات قفل التنشيط.
يمكنك تسجيل تتبُّع النظام باستخدام عدة طرق:
- استخدام أداة سطر الأوامر لتتبُّع النظام
- استخدام أداة CPU Profiler في "استوديو Android"
- استخدام واجهة مستخدم Perfetto
- تسجيل عملية تتبُّع يدويًا على الجهاز مباشرةً من خيارات المطوّرين.
فعِّل فئة Atrace "power:PowerManagement" في واجهة مستخدم Perfetto ضمن علامة التبويب "تطبيقات Android والخدمات".
بغض النظر عن الطريقة التي تختارها، من المهم التأكّد من أنّك تجمع "power:PowerManagement" فئة Atrace للسماح بعرض عمليات تتبُّع حالة الجهاز.
فحص واجهة مستخدم 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.
متابعة القراءة
-
أخبار المنتجات
يسرّنا الإعلان عن توفّر الدعم الرسمي لـ Unreal Engine وGodot على Android XR. نحن بصدد إطلاق أدوات جديدة مصمّمة لتعزيز إنتاجيتك وإتاحة إمكانات XR جديدة: Android XR Engine Hub وAndroid XR Interaction Framework.
Luke Hopkins • قراءة لمدة 4 دقائق
-
أخبار المنتجات
مع إصدار Android 17، ننتقل إلى معيار تطوير تكيّفي أولاً. لم يعُد المستخدمون يعتمدون على عامل شكل واحد، بل ينتقلون بين الهواتف والهواتف القابلة للطي والأجهزة اللوحية وأجهزة الكمبيوتر المحمولة وشاشات السيارات وبيئات XR الغامرة على مدار اليوم.
Fahd Imtiaz • قراءة لمدة 4 دقائق
-
أخبار المنتجات
يسرّنا مشاركة ميزات Google TV وأدوات المطوّرين المصمّمة لزيادة إمكانية استكشاف المحتوى وإعداد تطبيقك لتجارب التلفزيون المستقبلية.
Paul Lammertsma • قراءة لمدة 4 دقائق
البقاء على اطّلاع على آخر التحديثات
يمكنك تلقّي أحدث الإحصاءات حول تطوير Android في بريدك الوارد أسبوعيًا.