تحسين الموقع الجغرافي للبطارية

تحديد الموقع الجغرافي في الخلفية الحدود التي تم فرضها في جدَّد Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) هذا الموضوع لتسليط الضوء على كيفية يؤثر استخدام خدمات الموقع في استنزاف البطارية. تتناول هذه الصفحة بعض المواقع الجغرافية أفضل الممارسات بشأن الخدمات والإجراءات التي يمكنك اتخاذها الآن لزيادة طاقة البطارية كفاءة. يفيد تطبيق أفضل الممارسات هذه تطبيقك بغض النظر عن إصدار النظام الأساسي الذي يعمل عليه.

أدت حدود الموقع الجغرافي في الخلفية في Android 8.0 إلى التغييرات التالية:

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

تفترض هذه الصفحة أنك تستخدم خدمات الموقع الجغرافي من Google. لواجهات برمجة التطبيقات (APIs)، التي توفر دقة عالية فرض عبء بطارية أخف من موقع إطار العمل API. ضِمن تفترض هذه الصفحة على وجه التحديد أن موفِّر الموقع المدمج API، تجمع بين الإشارات من نظام تحديد المواقع العالمي (GPS) وشبكات Wi-Fi وشبكات الجوّال مقياس التسارع والجيروسكوب ومقياس المغناطيسية وغيرها من المستشعرات. ينبغي عليك أيضًا على دراية بالحدود الجغرافية واجهة برمجة التطبيقات التي تتميز أعلى واجهة برمجة التطبيقات لموفر الموقع المدمج، ومحسّنة للبطارية أدائه.

فهم طريقة استنزاف البطارية

ترتبط عملية جمع المواقع الجغرافية واستنزاف البطارية مباشرةً في ما يلي: والجوانب التالية:

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

الدقة

يمكنك تحديد دقة الموقع باستخدام setPriority() مع تمرير إحدى القيم التالية كوسيطة:

  • PRIORITY_HIGH_ACCURACY الموقع الجغرافي الأكثر دقة، والذي يتم احتسابه باستخدام المدخلات عند الضرورة (يمكّن نظام تحديد المواقع العالمي (GPS) وWi-Fi والخلية، وتستخدم منو أجهزة الاستشعار)، وقد يتسبب في استنزاف كبير للبطارية.
  • PRIORITY_BALANCED_POWER_ACCURACY يتيح الموقع الجغرافي بدقة أكبر مع تحسين مصدر الطاقة. نادرًا ما تستخدم نظام تحديد المواقع العالمي (GPS). وعادةً ما تستخدم شبكة Wi-Fi ومعلومات الخلية لحساب الموقع الجغرافي للجهاز.
  • PRIORITY_LOW_POWER يعتمد بشكل كبير على الأبراج الخلوية ويتجنب مدخلات نظام تحديد المواقع العالمي (GPS) وWi-Fi، مما يوفر الدقة التقريبية (على مستوى المدينة) مع الحد الأدنى من استنزاف البطارية.
  • PRIORITY_NO_POWER يتلقى المواقع الجغرافية بشكل سلبي من التطبيقات الأخرى التي التي تم حسابها بالفعل.

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

التردد

يمكنك تحديد معدّل تكرار المواقع الجغرافية بطريقتَين:

  • يمكنك استخدام setinterval() لتحديد الفاصل الزمني الذي يتم احتساب الموقع الجغرافي به لتطبيقك.
  • يمكنك استخدام setFastestInterval() لتحديد الفاصل الزمني الذي يتم فيه حساب الموقع للتطبيقات الأخرى إلى تطبيقك.

يجب إدخال أكبر قيمة ممكنة عند استخدام setInterval(). هذا هو وينطبق ذلك بشكل خاص على جمع بيانات الموقع في الخلفية، والذي غالبًا ما يكون مصدرًا استنزاف البطارية بشكل غير مرحب به ينبغي حجز فواصل زمنية من بضع ثوان حالات الاستخدام التي تعمل في المقدّمة. تم توفير حدود الموقع الجغرافي في الخلفية في Android 8.0 لفرض هذه الاستراتيجيات، ولكن يجب أن يسعى تطبيقك إلى فرضها على Android 7.0 أو إصدار أقدم.

استغرق الرد وقتًا طويلاً

ويمكنك تحديد وقت الاستجابة باستخدام setMaxWaitTime() بتمرير قيمة أكبر من الفاصل الزمني عدة مرات المحددة في setInterval() . يؤدي هذا الخيار إلى تأخير تسليم الموقع الجغرافي، وقد يتم إجراء تعديلات متعددة على الموقع الجغرافي. تسليمه على دفعات. يساعد هذان التغييران في تقليل استهلاك البطارية.

إذا لم يكن تطبيقك بحاجة إلى تحديث الموقع الجغرافي على الفور، عليك اجتياز أكبر قيمة ممكنة لطريقة setMaxWaitTime()، حيث يتم التداول بشكل فعال وقت الاستجابة للحصول على مزيد من البيانات وكفاءة البطارية.

عند استخدام الحدود الجغرافية، يجب أن تمرر التطبيقات قيمة كبيرة إلى setNotificationResponsiveness() للحفاظ على الطاقة. ويوصى بقيمة تبلغ خمس دقائق أو أكثر.

حالات استخدام الموقع الجغرافي

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

التحديثات المرئية للمستخدم أو التحديثات التي تعمل في المقدّمة

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

يمكنك استخدام setPriority() بقيمة PRIORITY_HIGH_ACCURACY أو PRIORITY_BALANCED_POWER_ACCURACY

الفاصل الزمني المحدد في setInterval() على حالة الاستخدام: بالنسبة للسيناريوهات في الوقت الفعلي، قم بتعيين القيمة على قليل ثانية وإلا، فضعها في بضع دقائق (حوالي دقيقتين أو أكبر (يوصى به) لتقليل استخدام البطارية).

معرفة موقع الجهاز

مثال: يريد أحد تطبيقات الطقس معرفة الموقع الجغرافي للجهاز.

يمكنك استخدام getLastLocation() تعرض أحدث موقع متاح (والذي يكون في حالات نادرة فيمكن أن تكون الحالات خالية) . توفِّر هذه الطريقة طريقة بسيطة لمعرفة الموقع الجغرافي لا تنطوي على تكاليف مرتبطة بطلب تحديثات الموقع الجغرافي بشكلٍ نشط. استخدام جنبًا إلى جنب مع isLocationAvailable() التي تُرجع true عند عرض الموقع بواسطة getLastLocation() محدّث بشكل معقول.

بدء التحديثات عندما يكون المستخدم في موقع جغرافي معيّن

مثال: طلب التحديثات عندما يكون المستخدم على مسافة معينة من العمل أو المنزل أو أي مكان آخر.

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

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

بدء التحديثات بناءً على حالة نشاط المستخدم

مثال: طلب التحديثات فقط عند قيادة المستخدم أو قيادته لسيارة دَرَّاجَة

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

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

تحديثات الموقع الجغرافي في الخلفية لفترة طويلة ومرتبطة بالمناطق الجغرافية

مثال: يريد المستخدم تلقّي إشعار عندما يكون الجهاز قريبًا. لبائع تجزئة.

هذه حالة استخدام ممتازة لوضع حدود جغرافية. نظرًا لأن حالة الاستخدام تقريبًا يتضمن بالتأكيد الموقع في الخلفية، فاستخدم addGeofences(GeofencingRequest, PendingIntent) .

عليك ضبط خيارات الضبط التالية:

  • إذا كنت بصدد تتبع انتقالات الثبات، استخدم setLoiteringDelay() لتمرير قيمة حوالي خمس دقائق أو أقل.

  • يمكنك استخدام setNotificationResponsiveness()، تمرير قيمة حوالي خمس دقائق. ومع ذلك، ننصحك باستخدام قيمة حوالي عشر دقائق إذا كان يمكن للتطبيق إدارة التأخير الإضافي في والاستجابة.

لا يمكن أن يسجّل التطبيق سوى 100 حدود جغرافية في المرة الواحدة. قيد الاستخدام الحالة التي يريد فيها التطبيق تتبع عدد كبير من خيارات بائعي التجزئة، فإن التطبيق قد ترغب في تسجيل حدود جغرافية كبيرة (على مستوى المدينة) وديناميكيًا تسجيل حدود جغرافية أصغر (للمواقع داخل المدينة) للمتاجر داخل السياج الجغرافي الأكبر. عندما يدخل المستخدم حدودًا جغرافية كبيرة، يمكن أن إضافته؛ عندما يخرج المستخدم من السياج الجغرافي الأكبر، يمكن للأسوار الجغرافية الأصغر إزالته وإعادة تسجيل الحدود الجغرافية لمنطقة جديدة.

يتم تشغيل تحديثات الموقع الجغرافي في الخلفية لفترة طويلة بدون إظهار مكوِّن التطبيق.

مثال: تطبيق يتتبّع الموقع الجغرافي بشكل سلبي

يمكنك استخدام setPriority() مع PRIORITY_NO_POWER خيار إذا أمكن لأنه لا يستنزف البطارية تقريبًا. في حال استخدام يتعذّر استخدام PRIORITY_NO_POWER، يُرجى استخدام PRIORITY_BALANCED_POWER_ACCURACY أو PRIORITY_LOW_POWER, ولكن تجنب استخدام PRIORITY_HIGH_ACCURACY إلى العمل في الخلفية بشكل مستمر لأن هذا الخيار يستنزف بشكل كبير البطارية.

إذا أردت الحصول على مزيد من بيانات الموقع، فاستخدم الموقع السلبي من خلال طلب setFastestInterval() بتمرير قيمة أصغر مما تمرره إليه setInterval() عند الدمج مع PRIORITY_NO_POWER فإن الموقع السلبي يمكنه عرض الموقع المحسوب التطبيقات الأخرى بدون أي تكلفة إضافية.

معدل التكرار المعتدل من خلال إضافة بعض وقت الاستجابة، باستخدام setMaxWaitTime() . على سبيل المثال، إذا استخدمت الطريقة setinterval() مع قيمة 10 دقائق تقريبًا، نقترح عليك الاتصال بـ setMaxWaitTime() باستخدام قيمة بين 30 و60 دقيقة. باستخدام هذه الخيارات، يتم حساب الموقع لتطبيقك كل 10 دقائق تقريبًا، ولكن يتم تشغيل التطبيق فقط كل 30 إلى 60 دقيقة مع توفير بعض بيانات الموقع كتحديث مجمّع. هذا النمط يستبدل وقت الاستجابة وقت الاستجابة للحصول على مزيد من البيانات المتاحة وعمر البطارية أدائه.

تحديثات عالية الدقة بشكل متكرر أثناء تفاعل المستخدم مع التطبيقات الأخرى

مثال: تطبيق للتنقّل أو اللياقة البدنية يستمر في العمل عند استخدام المستخدِم إما إطفاء الشاشة أو فتح تطبيق مختلف.

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

أفضل الممارسات المتعلقة بالموقع الجغرافي

يساعد تنفيذ أفضل الممارسات في هذا القسم على تقليل استخدام البطارية تطبيقك.

إزالة تحديثات الموقع الجغرافي

من المصادر الشائعة لاستنزاف البطارية غير الضروري هو عدم إزالة الموقع التحديثات عندما لا تكون هناك حاجة إليها. يمكن أن يحدث هذا، على سبيل المثال، عندما onStart() من النشاط دورة حياة onResume() طرق تحتوي على استدعاء requestlocationUpdates() بدون استدعاء مطابق removeLocationUpdates() في onPause() أو onStop() طرق مراحل النشاط.

يمكنك استخدام المكونات الواعية لمراحل النشاط لإدارة دورة حياة والأنشطة في تطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على التعامل مع دورات الحياة مع المكوّنات الواعية لمراحل النشاط:

ضبط المُهلات

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

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

لإضافة مهلة إلى طلب موقع سياج جغرافي، اتصل setExpirationDuration() .

الطلبات المجمّعة

بالنسبة إلى جميع حالات الاستخدام التي لا تعمل في المقدّمة، اجمع طلبات متعدّدة معًا. يمكنك استخدام الـ setInterval() لتحديد الفاصل الزمني الذي تريد حساب الموقع عنده. بعد ذلك، استخدم دالة الرسم setMaxWaitTime() لتحديد الفاصل الزمني الذي يتم عنده تسليم الموقع إلى تطبيقك. تشير رسالة الأشكال البيانية يجب أن تكون القيمة التي يتم تمريرها إلى طريقة setMaxWaitTime() مضاعفًا للقيمة تمريره إلى طريقة setInterval(). على سبيل المثال، ضع في اعتبارك ما يلي طلب الموقع:

Kotlin

val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);

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

استخدام تحديثات الموقع الجغرافي السلبية

في حالات الاستخدام في الخلفية، يُفضَّل تقييد تحديثات الموقع الجغرافي. جهاز Android تفرض حدود 8.0 هذه الممارسة، ولكن ينبغي للتطبيقات التي تعمل على أجهزة قديمة وابذل قصارى جهدك لتحديد الموقع الجغرافي في الخلفية قدر الإمكان.

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

Kotlin

val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)

Java

LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);

في المثال السابق، يتم حساب الموقع الجغرافي لتطبيقك كل 15 دقيقة تقريبًا دقيقة. إذا طلبت التطبيقات الأخرى الوصول إلى الموقع الجغرافي، تتم إتاحة البيانات لتطبيقك. على فاصل زمني أقصى يبلغ دقيقتين.

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

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