أخبار المنتجات

تحسين أداء بطارية تطبيقك باستخدام مقياس "قفل التنشيط" في مؤشرات Android الحيوية

مدّة القراءة: 7 دقائق
عرض الملف الشخصي لـ "أليس يوان"
Alice Yuan مهندسة علاقات المطوّرين، Android

يُعدّ عمر البطارية جانبًا مهمًا من تجربة المستخدم، وتؤدي عمليات قفل التنشيط دورًا رئيسيًا في ذلك. هل تستخدمها بشكل مفرط؟ في منشور المدونة هذا، سنتناول عمليات قفل التنشيط وأفضل الممارسات لاستخدامها وكيفية فهم سلوك تطبيقك بشكل أفضل باستخدام مقياس Play Console.

الاستخدام المفرط لعمليات قفل التنشيط الجزئي في مؤشرات Android الحيوية

يراقب Play Console الآن استنزاف البطارية، مع التركيز على الاستخدام المفرط لعمليات قفل التنشيط الجزئي كمؤشر أداء رئيسي.

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

warning.png

تحذير بشأن عمليات قفل التنشيط بشكل مفرط في نظرة عامة على مؤشرات Android الحيوية.

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

  • تم الاحتفاظ بعمليات قفل التنشيط لمدة ساعتين على الأقل خلال فترة 24 ساعة.
  • أثّر ذلك في أكثر من% 5 من جلسات تطبيقك، بمتوسط على مدار 28 يومًا.

يتم استثناء عمليات قفل التنشيط التي تنشئها واجهات برمجة التطبيقات التي يبدأها المستخدمون لـ الصوت والموقع الجغراعات وJobScheduler من عملية احتساب عمليات قفل التنشيط.

فهم عمليات قفل التنشيط

عملية قفل التنشيط هي آلية تسمح لتطبيق بإبقاء وحدة المعالجة المركزية (CPU) للجهاز قيد التشغيل حتى عندما لا يتفاعل المستخدم معها بشكل نشط. 

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

هناك طريقتان للحصول على عمليات قفل التنشيط الجزئي:

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

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

أفضل الممارسات لاستخدام عمليات قفل التنشيط

قبل أن نتناول كيفية تصحيح أخطاء الاستخدام المفرط لعمليات قفل التنشيط، تأكّد من اتّباع أفضل الممارسات المتعلقة بعمليات قفل التنشيط. 

ضَع في اعتبارك هذه الأسئلة الأربعة المهمة.


1. هل وضعت في اعتبارك خيارات بديلة لعمليات قفل التنشيط؟

قبل التفكير في الحصول على عملية قفل تنشيط جزئي يدويًا، اتّبِع مخطط اتخاذ القرار التالي:

wakelock.png

مخطط انسيابي لتحديد وقت الحصول على عملية قفل تنشيط يدويًا

  1. هل يجب أن تبقى الشاشة قيد التشغيل؟
  2. هل يشغّل التطبيق خدمة تعمل في المقدّمة؟
    • لا: ليس عليك الحصول على عملية قفل تنشيط يدويًا.
  3. هل سيؤثر تعليق الجهاز سلبًا في تجربة المستخدم؟
    • لا: على سبيل المثال، لا يتطلب تعديل إشعار بعد استئناف الجهاز عملية قفل تنشيط.
    • نعم: إذا كان من الضروري منع الجهاز من التعليق، مثل التواصل المستمر مع جهاز خارجي، يمكنك المتابعة.
  4. هل هناك حاليًا واجهة برمجة تطبيقات تبقي الجهاز قيد التشغيل نيابةً عنك؟
  5. إذا أجبت عن كل هذه الأسئلة ولم تجد أي بديل، عليك المتابعة والحصول على عملية قفل تنشيط يدويًا.

2. هل تسمّي عملية قفل التنشيط بشكل صحيح؟

عند الحصول على عمليات قفل التنشيط يدويًا، من المهم تسميتها بشكل صحيح لتصحيح الأخطاء:

  • لا تُدرِج أي معلومات تكشف الهوية الشخصية في الاسم، مثل عناوين البريد الإلكتروني. إذا تم رصد معلومات تكشف الهوية الشخصية، يتم تسجيل عملية قفل التنشيط على أنّها _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 الحيوية تفصيلاً لأسماء عمليات قفل التنشيط غير المستثناة المرتبطة بتطبيقك، مع عرض الجلسات والمدد المتأثرة. يُرجى تذكُّر استخدام المستندات لمساعدتك في تحديد ما إذا كان اسم عملية قفل التنشيط محتفظًا به من قِبل التطبيق أو من قِبل واجهة برمجة تطبيقات أخرى.

breakdowns2.png

لوحة بيانات "الاستخدام المفرط لعمليات قفل التنشيط الجزئي" في مؤشرات Android الحيوية بعد التمرير للأسفل إلى قسم التفاصيل لعرض علامات عمليات قفل التنشيط المفرطة

تصحيح أخطاء عمليات قفل التنشيط المفرطة التي يحتفظ بها العاملون/المهام

يمكنك تحديد عمليات قفل التنشيط التي يحتفظ بها العاملون باستخدام اسم عملية قفل التنشيط هذا:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

تتوفّر القائمة الكاملة بأسماء عمليات قفل التنشيط التي يحتفظ بها العاملون في المستندات. لتصحيح أخطاء عمليات قفل التنشيط هذه، يمكنك استخدام أداة فحص المهام في الخلفية لتصحيح الأخطاء محليًا، أو الاستفادة من getStopReason لتصحيح الأخطاء في الحقل. 

أداة فحص المهام في الخلفية في "استوديو Android"

taskinspector.png


لقطة شاشة لأداة فحص المهام في الخلفية، حيث تمكّنت من تحديد منفِّذ "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)
        }
}

يمكنك الاطّلاع على مزيد من التفاصيل في تحسين استخدام البطارية لواجهات برمجة تطبيقات جدولة المهام.

تصحيح أخطاء الأنواع الأخرى من عمليات قفل التنشيط المفرطة

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

تجميع بيانات آثار الأنشطة على مستوى النظام

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

يمكنك تسجيل بيانات آثار الأنشطة على مستوى النظام باستخدام عدة طرق: 

powermgmt.png

يمكنك تفعيل فئة Atrace "power:PowerManagement" في واجهة مستخدم Perfetto ضمن علامة التبويب "تطبيقات Android والخدمات". 

بغض النظر عن الطريقة التي تختارها، من المهم التأكّد من أنّك تجمع "power:PowerManagement" فئة Atrace للسماح بعرض عمليات تتبُّع حالة الجهاز. 

فحص واجهة مستخدم Perfetto وتحليل SQL

يمكن فتح بيانات آثار الأنشطة على مستوى النظام وفحصها في واجهة مستخدم Perfetto. عند فتح بيانات آثار الأنشطة، سيظهر لك تمثيل مرئي لمختلف العمليات على مخطط زمني. عمليات التتبُّع التي سنركّز عليها في هذا الدليل هي عمليات التتبُّع ضمن "حالة الجهاز".

perfetto.png


يمكنك تثبيت عمليات التتبُّع ضمن "حالة الجهاز"، مثل "التطبيق الرئيسي" و"حالة الشاشة" و"عمليات قفل التنشيط الطويلة" و"المهام"، لتحديد شرائح عمليات قفل التنشيط الطويلة بصريًا.

تسرد كل كتلة اسم الحدث ووقت بدء الحدث ووقت انتهائه. في 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.

من تأليف:
متابعة القراءة