اقدامات زیر را برای بهبود تأثیر برنامه خود بر عمر باتری دستگاه هنگام استفاده از خدمات مکان انجام دهید.
بهروزرسانیهای مکان را حذف کنید
یکی از منابع رایج تخلیه غیر ضروری باتری، عدم حذف بهروزرسانیهای مکان در زمانی است که دیگر مورد نیاز نیستند.
این می تواند زمانی اتفاق بیفتد که متدهای چرخه حیات onStart()
یا onResume()
شامل یک فراخوانی به requestlocationUpdates()
بدون فراخوانی مربوطه به removeLocationUpdates()
در متدهای چرخه عمر onPause()
یا onStop()
باشد.
میتوانید از مؤلفههای مربوط به چرخه حیات برای مدیریت بهتر چرخه حیات فعالیتهای برنامه خود استفاده کنید. برای اطلاعات بیشتر، به مدیریت چرخه های زندگی با اجزای مربوط به چرخه زندگی مراجعه کنید.
زمانبندی را تنظیم کنید
برای جلوگیری از تخلیه باتری، زمانی که بهروزرسانیهای مکان باید متوقف شوند، یک بازه زمانی معقول تنظیم کنید. مهلت زمانی تضمین میکند که بهروزرسانیها بهطور نامحدود ادامه نمییابند، و در سناریوهایی که بهروزرسانیها درخواست میشوند اما حذف نمیشوند (مثلاً به دلیل وجود اشکال در کد) از برنامه محافظت میکند.
برای درخواست ارائهدهنده موقعیت مکانی ذوب شده، با فراخوانی setExpirationDuration()
یک بازه زمانی اضافه کنید که پارامتری را دریافت میکند که زمان را بر حسب میلیثانیه از آخرین فراخوانی متد نشان میدهد. همچنین میتوانید با فراخوانی setExpirationTime()
، که پارامتری را دریافت میکند که زمان انقضا را بر حسب میلیثانیه از زمان آخرین بوت شدن سیستم نشان میدهد، یک بازه زمانی اضافه کنید.
برای افزودن یک بازه زمانی به درخواست مکان جغرافیایی، متد setExpirationDuration()
را فراخوانی کنید.
درخواست های دسته ای
برای همه موارد استفاده غیر پیش زمینه، چندین درخواست را با هم دسته بندی کنید. از متد setInterval()
برای تعیین بازه زمانی که می خواهید مکان محاسبه شود استفاده کنید. سپس، از متد setMaxWaitTime()
برای تعیین فاصله زمانی که مکان به برنامه شما تحویل داده می شود، استفاده کنید. یک مقدار به متد setMaxWaitTime()
ارسال کنید که مضربی از مقدار ارسال شده به متد setInterval()
است. به عنوان مثال، درخواست مکان زیر را در نظر بگیرید:
کاتلین
val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)
جاوا
LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);
در این حالت، سیستم تقریباً هر ده دقیقه یک بار موقعیت مکانی را محاسبه می کند و تقریباً در هر ساعت تقریباً شش نقطه داده مکان را در یک دسته ارائه می دهد. در حالی که هنوز هر ده دقیقه یا بیشتر بهروزرسانی موقعیت مکانی دریافت میکنید، در مصرف باتری صرفهجویی میکنید زیرا دستگاه شما فقط هر ساعت یکبار بیدار میشود.
از بهروزرسانیهای موقعیت مکانی غیرفعال استفاده کنید
در موارد استفاده در پسزمینه، ایده خوبی است که بهروزرسانیهای مکان را کاهش دهید. محدودیتهای Android 8.0 (سطح API 26) این عمل را اعمال میکنند، اما برنامههایی که در دستگاههای پایینتر اجرا میشوند باید تلاش کنند تا مکان پسزمینه را تا حد امکان محدود کنند.
این احتمال وجود دارد که در حالی که برنامه شما در پسزمینه است، برنامه دیگری ممکن است مرتباً در پیشزمینه بهروزرسانی مکان را درخواست کند. سرویسهای مکان این بهروزرسانیها را در اختیار برنامه شما قرار میدهند. درخواست مکان زیر را در نظر بگیرید، که به طور فرصت طلبانه داده های مکان را مصرف می کند:
کاتلین
val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)
جاوا
LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);
در مثال قبلی، موقعیت مکانی برنامه تقریباً هر 15 دقیقه محاسبه می شود. اگر برنامه های دیگر درخواست مکان کنند، برنامه داده ها را حداکثر در فاصله زمانی دو دقیقه دریافت می کند.
در حالی که مصرف مکان به صورت غیرفعال باعث تخلیه باتری نمی شود، در مواردی که دریافت داده های مکان باعث ایجاد عملیات گران قیمت CPU یا I/O می شود، بیشتر مراقب باشید. برای به حداقل رساندن هزینه باتری، فاصله زمانی مشخص شده در setFastestInterval()
نباید خیلی کوچک باشد.