লোকেশন সার্ভিস ব্যবহার করার সময় ডিভাইসের ব্যাটারি লাইফের উপর আপনার অ্যাপের প্রভাব উন্নত করতে নিম্নলিখিত পদক্ষেপগুলো নিন।
অবস্থান আপডেটগুলি সরান
অপ্রয়োজনীয়ভাবে ব্যাটারি খরচ হওয়ার একটি সাধারণ কারণ হলো, লোকেশন আপডেটগুলোর আর প্রয়োজন না থাকা সত্ত্বেও সেগুলো মুছে না ফেলা।
এটি তখন ঘটতে পারে যখন কোনো অ্যাক্টিভিটির onStart() বা onResume() লাইফসাইকেল মেথডে requestlocationUpdates() কল করা হয়, কিন্তু onPause() বা onStop() লাইফসাইকেল মেথডে অনুরূপ removeLocationUpdates() কল করা হয় না।
আপনার অ্যাপের অ্যাক্টিভিটিগুলোর লাইফসাইকেল আরও ভালোভাবে পরিচালনা করার জন্য আপনি লাইফসাইকেল-অ্যাওয়ার কম্পোনেন্ট ব্যবহার করতে পারেন। আরও তথ্যের জন্য, “লাইফসাইকেল-অ্যাওয়ার কম্পোনেন্টের মাধ্যমে লাইফসাইকেল পরিচালনা” দেখুন।
টাইমআউট সেট করুন
ব্যাটারি দ্রুত শেষ হওয়া থেকে রক্ষা করতে, লোকেশন আপডেট কখন বন্ধ হবে তার জন্য একটি যুক্তিসঙ্গত টাইমআউট সেট করুন। এই টাইমআউট নিশ্চিত করে যে আপডেটগুলো অনির্দিষ্টকালের জন্য চলতে থাকবে না, এবং এটি এমন পরিস্থিতিতে অ্যাপটিকে সুরক্ষিত রাখে যেখানে আপডেটের জন্য অনুরোধ করা হলেও তা সরানো হয় না (উদাহরণস্বরূপ, কোডের কোনো বাগের কারণে)।
একটি ফিউজড লোকেশন প্রোভাইডার রিকোয়েস্টের জন্য, setDurationMillis() কল করে একটি টাইমআউট যোগ করুন, যা একটি প্যারামিটার গ্রহণ করে এবং এই প্যারামিটারটি মেথডটি শেষবার কল করার পর থেকে মিলিসেকেন্ডে অতিবাহিত সময়কে নির্দেশ করে। আপনি এই মেথডটি ব্যবহার করে মেয়াদ শেষের সময়কে ডিউরেশন বা সময়কালের এককে প্রকাশ করতেও পারেন।
জিওফেন্স লোকেশন অনুরোধে টাইমআউট যোগ করতে, setExpirationDuration() মেথডটি কল করুন।
ব্যাচ অনুরোধ
সমস্ত নন-ফোরগ্রাউন্ড ব্যবহারের ক্ষেত্রে, একাধিক অনুরোধ একসাথে ব্যাচ করুন। আপনি যে ব্যবধানে অবস্থান গণনা করতে চান তা নির্দিষ্ট করতে setIntervalMillis() পদ্ধতিটি ব্যবহার করুন। তারপর, আপনার অ্যাপে অবস্থান পাঠানোর ব্যবধান নির্ধারণ করতে setMaxUpdateDelayMillis() পদ্ধতিটি ব্যবহার করুন। setMaxUpdateDelayMillis() পদ্ধতিতে এমন একটি মান পাস করুন যা setIntervalMillis() পদ্ধতিতে পাস করা মানের গুণিতক। উদাহরণস্বরূপ, নিম্নলিখিত অবস্থান অনুরোধটি বিবেচনা করুন:
কোটলিন
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();
এক্ষেত্রে, সিস্টেমটি মোটামুটি প্রতি দশ মিনিটে অবস্থান নির্ণয় করে এবং প্রায় প্রতি ঘণ্টায় একসাথে প্রায় ছয়টি অবস্থানের ডেটা পয়েন্ট সরবরাহ করে। যদিও আপনি তখনও প্রায় প্রতি দশ মিনিটে অবস্থানের আপডেট পান, আপনার ব্যাটারি সাশ্রয় হয়, কারণ আপনার ডিভাইসটি কেবল প্রতি ঘণ্টা বা তার কিছু সময় পর পর সক্রিয় হয়।
প্যাসিভ অবস্থান আপডেট ব্যবহার করুন
ব্যাকগ্রাউন্ডে ব্যবহারের ক্ষেত্রে লোকেশন আপডেটের গতি কমিয়ে রাখা একটি ভালো অভ্যাস। অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬)-এর সীমাবদ্ধতা এই নিয়মটি প্রয়োগ করে, কিন্তু এর চেয়ে নিম্নস্তরের ডিভাইসে চলা অ্যাপগুলোর উচিত ব্যাকগ্রাউন্ডে লোকেশন আপডেট যতটা সম্ভব সীমিত রাখার চেষ্টা করা।
এমনটা হতে পারে যে, আপনার অ্যাপটি যখন ব্যাকগ্রাউন্ডে থাকে, তখন ফোরগ্রাউন্ডে থাকা অন্য কোনো অ্যাপ ঘন ঘন লোকেশন আপডেটের জন্য অনুরোধ করতে পারে। লোকেশন সার্ভিস এই আপডেটগুলো আপনার অ্যাপের কাছে উপলব্ধ করে। নিম্নলিখিত লোকেশন অনুরোধটি বিবেচনা করুন, যা সুযোগ বুঝে লোকেশন ডেটা ব্যবহার করে:
কোটলিন
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();
পূর্ববর্তী উদাহরণে, অ্যাপটির অবস্থান মোটামুটি প্রতি ১৫ মিনিটে গণনা করা হয়। যদি অন্য অ্যাপগুলো অবস্থানের জন্য অনুরোধ করে, তবে অ্যাপটি সর্বোচ্চ দুই মিনিটের ব্যবধানে ডেটা গ্রহণ করে।
যদিও নিষ্ক্রিয়ভাবে অবস্থান গ্রহণ করলে ব্যাটারির কোনো ক্ষতি হয় না, তবে যেসব ক্ষেত্রে অবস্থানের ডেটা গ্রহণ করার ফলে ব্যয়বহুল সিপিইউ বা আই/ও অপারেশন শুরু হয়, সেখানে অতিরিক্ত সতর্কতা অবলম্বন করুন। ব্যাটারির খরচ কমাতে, setMinUpdateIntervalMillis() ফাংশনে নির্দিষ্ট করা ব্যবধানটি খুব কম হওয়া উচিত নয়।