ব্যাটারির আয়ুর জন্য লোকেশন ব্যবহার অপ্টিমাইজ করুন

লোকেশন পরিষেবা ব্যবহার করার সময় ডিভাইসের ব্যাটারির আয়ুর উপর আপনার অ্যাপের প্রভাব উন্নত করতে নিম্নলিখিত অ্যাকশন নিন।

লোকেশন সম্পর্কিত আপডেট সরান

অপ্রয়োজনীয় ব্যাটারি ড্রেন হওয়ার একটি সাধারণ কারণ হল, লোকেশন আপডেট আর প্রয়োজন না হলেও সেটি বন্ধ না করা।

এটি তখন হতে পারে যখন কোনও অ্যাক্টিভিটির onStart() বা onResume() লাইফসাইকেল পদ্ধতিতে requestlocationUpdates()-এ কল থাকে, কিন্তু onPause() বা onStop() লাইফসাইকেল পদ্ধতিতে removeLocationUpdates()-এ কোনও সংশ্লিষ্ট কল থাকে না।

আপনার অ্যাপে অ্যাক্টিভিটির লাইফসাইকেল আরও ভালোভাবে ম্যানেজ করতে আপনি লাইফসাইকেল-অ্যাওয়ার কম্পোনেন্ট ব্যবহার করতে পারেন। আরও তথ্যের জন্য, লাইফসাইকেল-অ্যাওয়ার কম্পোনেন্টের মাধ্যমে লাইফসাইকেল ম্যানেজ করা দেখুন।

টাইমআউট সেট করুন

ব্যাটারি যাতে শেষ না হয়ে যায়, তার জন্য লোকেশন আপডেট বন্ধ করার উপযুক্ত টাইমআউট সেট করুন। টাইমআউট নিশ্চিত করে যে আপডেটগুলি অনির্দিষ্টকালের জন্য চলতে থাকবে না এবং এটি এমন পরিস্থিতিতে অ্যাপটিকে রক্ষা করে যেখানে আপডেটের অনুরোধ করা হয় কিন্তু সরানো হয় না (উদাহরণস্বরূপ, কোডে একটি বাগের কারণে)।

ফিউজড লোকেশন প্রোভাইডার অনুরোধের জন্য, setDurationMillis() কল করে টাইমআউট যোগ করুন, যা এমন একটি প্যারামিটার গ্রহণ করে যা পদ্ধতিটি শেষবার কল করার পর থেকে মিলিসেকেন্ডে সময়কে দেখায়। এছাড়াও, আপনি পদ্ধতি ব্যবহার করে মেয়াদ শেষ হওয়ার সময়কে সময়সীমা হিসেবে প্রকাশ করতে পারেন।

জিওফেন্স লোকেশন অনুরোধে টাইমআউট যোগ করতে, setExpirationDuration() মেথড কল করুন।

ব্যাচ অনুরোধ

সব নন-ফোরগ্রাউন্ড ব্যবহারের ক্ষেত্রে, একাধিক অনুরোধ একসাথে ব্যাচ করুন। আপনি যে ইন্টারভেলে লোকেশন গণনা করতে চান তা নির্দিষ্ট করতে setIntervalMillis() পদ্ধতি ব্যবহার করুন। তারপর, আপনার অ্যাপে লোকেশন ডেলিভার করার ব্যবধান সেট করতে setMaxUpdateDelayMillis() পদ্ধতি ব্যবহার করুন। setIntervalMillis() পদ্ধতিতে পাস করা মানের গুণিতক হিসেবে setMaxUpdateDelayMillis() পদ্ধতিতে একটি মান পাস করুন। যেমন, নিম্নলিখিত লোকেশন সংক্রান্ত অনুরোধটি বিবেচনা করুন:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build()

জাভা

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
    .setMaxUpdateDelayMillis(60 * 60 * 1000)
    .build();

এই ক্ষেত্রে, সিস্টেম মোটামুটি প্রতি দশ মিনিটে লোকেশন গণনা করে এবং প্রতি ঘন্টায় মোটামুটি ছয়টি লোকেশন ডেটা পয়েন্টের একটি ব্যাচ ডেলিভার করে। আপনি এখনও প্রতি দশ মিনিট বা তার কাছাকাছি সময়ে লোকেশন আপডেট পেলেও, আপনার ডিভাইস প্রতি এক ঘণ্টা বা তার কাছাকাছি সময়ে চালু হয় বলে ব্যাটারি সাশ্রয় হয়।

প্যাসিভ লোকেশন আপডেট ব্যবহার করা

ব্যাকগ্রাউন্ডে ব্যবহারের ক্ষেত্রে, লোকেশন আপডেট থ্রটল করা একটি ভালো আইডিয়া। Android 8.0 (API লেভেল ২৬) সীমা এই পদ্ধতি প্রয়োগ করে, তবে কম ভার্সনের ডিভাইসে চলা অ্যাপের ব্যাকগ্রাউন্ড লোকেশন যতটা সম্ভব সীমিত করার চেষ্টা করা উচিত।

আপনার অ্যাপ ব্যাকগ্রাউন্ডে চলাকালীন, অন্য কোনও অ্যাপ ফোরগ্রাউন্ডে ঘন ঘন লোকেশন আপডেট করার অনুরোধ করতে পারে। লোকেশন পরিষেবা আপনার অ্যাপে এইসব আপডেট উপলভ্য করে। নিম্নলিখিত লোকেশন অনুরোধ বিবেচনা করুন, যা সুযোগ বুঝে লোকেশন ডেটা ব্যবহার করে:

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build()

জাভা

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
    .setMinUpdateIntervalMillis(2 * 60 * 1000)
    .build();

আগের উদাহরণে, অ্যাপের লোকেশন মোটামুটি প্রতি ১৫ মিনিটে গণনা করা হয়। অন্য অ্যাপ লোকেশন সংক্রান্ত অনুরোধ করলে, অ্যাপটি সর্বাধিক দুই মিনিটের ব্যবধানে ডেটা পায়।

প্যাসিভভাবে লোকেশন ডেটা ব্যবহার করলে ব্যাটারি খরচ হয় না, তবে লোকেশন ডেটা পাওয়ার ফলে CPU বা I/O অপারেশন বেশি খরচ হলে বিশেষ যত্ন নিন। ব্যাটারির খরচ কমাতে, setMinUpdateIntervalMillis()-এ উল্লেখ করা ইন্টারভ্যাল খুব কম হওয়া উচিত নয়।