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

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

إزالة آخر المعلومات عن الموقع الجغرافي

إنّ عدم إزالة تعديلات الموقع الجغرافي عند عدم الحاجة إليها هو أحد الأسباب الشائعة لاستهلاك البطارية غير الضروري.

يمكن أن يحدث ذلك عندما تحتوي طُرق 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 (المستوى 26 من واجهة برمجة التطبيقات) هذه الممارسة، ولكن على التطبيقات التي تعمل على الأجهزة ذات الإصدارات الأقدم بذل جهد لحصر الوصول إلى الموقع الجغرافي في الخلفية قدر الإمكان.

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

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 دقيقة تقريبًا. إذا طلبت تطبيقات أخرى بيانات الموقع الجغرافي، يتلقّى التطبيق البيانات على فترات زمنية لا تتجاوز دقيقتين.

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