معظم محتوى هذا المنشور متاح أيضًا بتنسيق الفيديو ، اذهب إلى الساعة!
يعتبر عمر البطارية جانبًا مهمًا لتجربة المستخدم وأقفال الاستيقاظ تلعب دورًا رئيسيًا. هل تستخدمها بشكل مفرط؟ في منشور المدونة هذا ، سنستكشف ماهية أقفال Wake ، ما هي بعض أفضل الممارسات لاستخدامها وكيف يمكنك فهم سلوك التطبيق الخاص بك بشكل أفضل باستخدام Metric Console Play.
استخدام قفل الاستيقاظ الجزئي المفرط في نظام Android الحيوي
تراقب وحدة التحكم في Play الآن استنزاف البطارية ، مع التركيز على استخدام قفل الاستيقاظ الجزئي المفرط، كمؤشر أداء رئيسي.
هذه الميزة تزيد من أهمية كفاءة البطارية إلى جانب مؤشرات الاستقرار المتري الأساسية الحالية: تعطل المفرط للمستخدم و ANRs. حاليًا ، لن يكون التطبيق الذي يتجاوز العتبة أقل قابلية للاكتشاف على Google Play.
بالنسبة للأجهزة المحمولة ، ينطبق مقياس Android Attals على أقفال Wake غير المعفاة التي تم الحصول عليها أثناء إيقاف الشاشة وتكون التطبيق في الخلفية أو تشغيل خدمة مقدمة. يعتبر Android Attals استخدام قفل الاستيقاظ الجزئي المفرط إذا:
-
تقام أقفال الاستيقاظ لمدة ساعتين على الأقل خلال فترة 24 ساعة.
-
يؤثر على أكثر من 5 ٪ من جلسات التطبيق الخاص بك ، حيث بلغ متوسطها أكثر من 28 يومًا.
أقفال الاستيقاظ التي أنشأتها صوتيو موقع، و Jobscheduler يتم إعفاء واجهات برمجة التطبيقات التي بدأها المستخدم من حساب قفل الاستيقاظ.
فهم أقفال الاستيقاظ
قفل الاستيقاظ هو آلية تتيح للتطبيق الاحتفاظ بوحدة المعالجة المركزية للجهاز حتى عندما لا يتفاعل المستخدم بنشاط.
يحافظ قفل الاستيقاظ الجزئي على تشغيل وحدة المعالجة المركزية حتى لو كانت الشاشة متوقفة ، مما يمنع وحدة المعالجة المركزية من إدخال حالة “تعليق” منخفضة الطاقة. يحافظ قفل الاستيقاظ الكامل على الشاشة ووحدة المعالجة المركزية.
هناك طريقتان يتم الحصول على أقفال الاستيقاظ الجزئية:
-
يستحوذ التطبيق يدويًا على قفل الاستيقاظ باستخدامه PowerManager واجهات برمجة التطبيقات لحالة الاستخدام المحددة ، غالبًا ما يتم الحصول عليها بالتزامن مع أ خدمة المقدمة – واجهة برمجة تطبيقات دورة حياة النظام الأساسي المخصصة للتشغيل المقبول للمستخدم.
-
بدلاً من ذلك ، يتم الحصول على قفل الاستيقاظ من قبل واجهة برمجة تطبيقات أخرى ، وينسب إلى التطبيق بسبب استخدام واجهة برمجة التطبيقات ، وأكثر من ذلك في قسم أفضل الممارسات.
في حين أن أقفال الاستيقاظ ضرورية للمهام مثل إكمال تنزيل ملف كبير ، فإنهم يمكن أن يؤدي الاستخدام المفرط أو غير السليم إلى استنزاف بطارية كبير. لقد رأينا الحالات التي تحتوي فيها التطبيقات على أقفال الاستيقاظ لساعات أو تفشل في إطلاقها بشكل صحيح ، مما يؤدي إلى شكاوى المستخدم حول استنزاف بطارية كبير حتى عندما لا تتفاعل مع التطبيق.
أفضل الممارسات لاستخدام قفل الاستيقاظ
قبل أن نذهب حول كيفية تصحيح استخدام قفل الاستيقاظ المفرط ، تأكد من اتباع أفضل الممارسات.
النظر في هذه الأسئلة الأربعة الحرجة.
قبل التفكير في الحصول على قفل اليدوية اليدوي ، اتبع مخطط انسيابي لاتخاذ القرارات:
مخطط انسيابي لتقرير متى يجب الحصول يدويًا على قفل الاستيقاظ
-
هل تحتاج الشاشة إلى البقاء؟
هل يدير التطبيق خدمة مقدمة؟
هل هو ضار بتجربة المستخدم إذا كان الجهاز يعلق؟
-
لا: على سبيل المثال ، لا يتطلب تحديث إشعار بعد استيقاظ الجهاز قفلًا للاستيقاظ.
-
نعم: إذا كان من الأهمية بمكان منع الجهاز من التعليق ، مثل التواصل المستمر مع جهاز خارجي ، تابع.
هل هناك بالفعل واجهة برمجة تطبيقات تبقي الجهاز مستيقظًا نيابة عنك؟
-
يمكنك الاستفادة من الوثائق تحديد أقفال الاستيقاظ التي أنشأتها واجهات برمجة التطبيقات الأخرى لتحديد السيناريوهات التي يتم إنشاؤها من قِبل واجهات برمجة التطبيقات الأخرى التي أنشأتها واجهات برمجة التطبيقات الأخرى لتحديد السيناريوهات التي يتم فيها إنشاء أقفال الاستيقاظ بواسطة واجهات برمجة التطبيقات الأخرى مثل LocationManager.
-
في حالة عدم وجود واجهات برمجة التطبيقات ، انتقل إلى السؤال النهائي.
إذا كنت قد أجبت على كل هذه الأسئلة وحددت أي بديل ، فيجب عليك المتابعة مع الحصول يدويًا على قفل الاستيقاظ.
2. هل تسمية قفل الاستيقاظ بشكل صحيح؟
عند الحصول على أقفال الاستيقاظ يدويًا ، يكون التسمية المناسبة مهمة لتصحيح الأخطاء:
-
اترك أي معلومات تعريف شخصية (PII) في الاسم مثل عناوين البريد الإلكتروني. إذا تم اكتشاف PII ، يتم تسجيل قفل الاستيقاظ كـ _مجهول، إعاقة تصحيح الأخطاء.
-
لا تسمي قفل الاستيقاظ برمجيًا باستخدام أسماء الفئة أو الأسلوب ، حيث يمكن أن تتفوق عليها أدوات مثل Proguard. بدلاً من ذلك ، استخدم سلسلة مشفرة.
-
لا تضيف عدادات أو معرفات فريدة لعلامات قفل الاستيقاظ. يجب استخدام نفس العلامة في كل مرة يتم فيها تشغيل قفل الاستيقاظ للسماح للنظام بتجميع الاستخدام بالاسم ، مما يسهل اكتشاف السلوك غير الطبيعي.
3. هل يتم إطلاق قفل الاستيقاظ المكتسب دائمًا؟
إذا كنت تحصل على قفل Wake يدويًا ، فتأكد من تنفيذ إصدار Wake Lock دائمًا. يمكن أن يؤدي الفشل في إطلاق قفل الاستيقاظ إلى استنزاف بطارية كبير.
على سبيل المثال ، إذا تم طرح استثناء غير معطل أثناء المعالجة ()، ال يطلق() قد لا تحدث المكالمة أبدًا. بدلاً من ذلك ، يمكنك استخدام أ تجرب كتلة لضمان إطلاق قفل الاستيقاظ ، حتى إذا حدث استثناء.
بالإضافة إلى ذلك ، يمكنك إضافة مهلة إلى قفل الاستيقاظ لضمان إصدارها بعد فترة محددة ، ومنعها من الاحتفاظ بها إلى أجل غير مسمى.
fun processingWork() { wakeLock.apply { try { acquire(60 * 10 * 1000) // timeout after 10 minutes doTheWork() } finally { release() } } }
4. هل يمكنك تقليل تردد الاستيقاظ؟
بالنسبة لطلبات البيانات الدورية ، فإن تقليل عدد المرات التي يستيقظ فيها تطبيقك ، يعد الجهاز مفتاحًا لتحسين البطارية. بعض الأمثلة على الحد من تردد الاستيقاظ تشمل:
-
العامل: زيادة الفاصل الدوري في الدوريةق.
-
Sensormanager: الاستفادة من الضجة من خلال تحديد MaxReportlatencyMs عند تسجيل المستمع.
-
مزود الموقع المنصهر:
يمكنك عرض المزيد من التفاصيل في Wake Lock Best Practices Documentation.
تصحيح الاستخدام المفرط في قفل الاستيقاظ
حتى مع أفضل النوايا ، يمكن أن يحدث استخدام قفل الاستيقاظ المفرط. إذا تم وضع علامة على تطبيقك في وحدة التحكم ، فإليك كيفية تصحيحه:
يمكنك تحديد أقفال الاستيقاظ التي يسيطر عليها العامل مع اسم قفل الاستيقاظ هذا:
*Job*/
تتوفر القائمة الكاملة لأشكال أسماء قفلات الاستيقاظ التي يسيطر عليها العامل في الوثائق. لتصحيح أقفال الاستيقاظ هذه ، يمكنك استخدام مفتش مهمة الخلفية لتصحيحها محليًا ، أو الاستفادة من GetStopsence لتصحيح مشكلات في هذا المجال.
مفتش مهمة خلفية استوديو Androidالتقاط الشاشة لمفتش مهمة الخلفية ، حيث تمكنت من تحديد عامل “عامل Weathersyncwork” الذي تم إعادة تجديده وفشل في كثير من الأحيان.
لتصحيح الأخطاء المحلية العامل المشكلات ، استخدم هذه الأداة على جهاز محاكي أو جهاز متصل (مستوى API 26+). يعرض قائمة بالعمال وأوضعهم (الانتهاء ، تنفيذ ، enqueued) ، مما يتيح لك فحص التفاصيل وفهم سلاسل العمال.
على سبيل المثال ، يمكن أن يكشف ما إذا كان العامل يفشل أو يعيد إعادة المحاولة بشكل متكرر بسبب قيود النظام.
يرى وثائق مفتش مهمة الخلفية لمزيد من التفاصيل.
Workmanager getStoPreason
للتصحيح في الميدان للعمال مع أقفال الاستيقاظ المفرطة ، استخدم WorkInfo.getStopshoSt () على Workmanager 2.9.0+ أو لـ Jobscheduler ، jobparameters.getStopshoSe () متاح على SDK 31+.
يساعد API هذا على تسجيل سبب توقف العامل (على سبيل المثال ، stop_reason_timeoutو stop_reason_quota) ، تحديد مشكلات مثل المهلة المتكررة بسبب مدة وقت التشغيل المرهقة.
backgroundScope.launch { WorkManager.getInstance(context) .getWorkInfoByIdFlow(workRequest.id) .collect { workInfo -> logStopReason(workRequest.id, workInfo?.stopReason) } }
تصحيح أنواع أخرى من أقفال الاستيقاظ المفرطة
للحصول على سيناريوهات أكثر تعقيدًا تتضمن أقفال Wake التي تمسك يدويًا أو واجهات برمجة التطبيقات التي تحمل قفل الاستيقاظ ، نوصيك باستخدام مجموعة تتبع النظام للتصحيح.
مجموعة تتبع النظام
تتبع النظام هي أداة تصحيح أخطاء قوية تلتقط سجلًا مفصلاً لنشاط النظام على مدار فترة ما ، حيث توفر رؤى في حالة وحدة المعالجة المركزية ، ونشاط الخيط ، ونشاط الشبكة ، والمقاييس المتعلقة بالبطاريات مثل مدة الوظيفة واستخدام قفل الاستيقاظ.
يمكنك التقاط تتبع النظام باستخدام عدة طرق:
تمكين “Power: PowerManagement” فئة ATRACE في برنامج UI Perfetto ضمن علامة تبويب تطبيقات Android و SVCS.
بغض النظر عن الطريقة المختارة ، من الأهمية بمكان ضمان جمع “السلطة: PowerManagement” فئة Atrace لتمكين عرض مسارات حالة الجهاز.
فحص واجهة المستخدم Perfetto وتحليل SQL
يمكن فتح آثار النظام وفحصها في Perfetto UI. عندما تفتح التتبع ، سترى تصورًا لعمليات مختلفة على جدول زمني. المسارات التي سنركز عليها في هذا الدليل هي تلك الموجودة تحت “حالة الجهاز”.
قم بتثبيت المسارات تحت “حالة الجهاز” مثل “APP APP” و “Screen State” و “Long Wake Locks” و “Jobs” لتحديد شرائح قفل الاستيقاظ على المدى الطويل.
يسرد كل كتلة اسم الحدث ، وعندما بدأ الحدث ، وعندما انتهى. في 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
استخدم PerfilingManager لمجموعة Trace في الميدان
لقضايا يصعب إعادة الصياغة ، PerfilingManager (تمت إضافته في SDK 35) هو واجهة برمجية برمجية تتيح للمطورين جمع آثار النظام في الحقل مع مشغلات البدء والنهاية. إنه يوفر المزيد من التحكم في نقاط التشغيل البدء والنهاية لجمع الملف الشخصي ويفرض الحد من معدل النظام لمنع تأثير أداء الجهاز.
تحقق من الوثائق PerfilingManager لمزيد من الخطوات حول كيفية التنفيذ في مجموعة تتبع النظام الميداني والتي تتضمن كيفية البرمجة برمجيا التقاط أثرو تحليل بيانات التنميطوالاستخدام أوامر التصحيح المحلي.
ستبدو آثار النظام التي تم جمعها باستخدام PerfilingManager مماثلة لتلك التي تم جمعها يدويًا ، ولكن يتم تنقيح عمليات النظام وعمليات التطبيق الأخرى من التتبع.
خاتمة
يعد مقياس قفل الاستيقاظ الجزئي المفرط في Android Attals جزءًا صغيرًا من التزامنا المستمر بدعم المطورين في تقليل استنزاف البطارية وتحسين جودة التطبيق.
من خلال فهم وتنفيذ أقفال الاستيقاظ بشكل صحيح ، يمكنك تحسين أداء بطارية التطبيق بشكل كبير. إن الاستفادة من واجهات برمجة التطبيقات البديلة ، والالتزام بأفضل الممارسات ، واستخدام أدوات تصحيح الأخطاء القوية مثل مفتش مهمة الخلفية ، وآثار النظام وتوصيف Manager هي المفتاح لضمان نجاح تطبيقك على Google Play.

