নেটওয়ার্ক অ্যাক্সেস অপ্টিমাইজ করুন

ডেটা স্থানান্তরের জন্য ওয়্যারলেস রেডিও ব্যবহার করা আপনার অ্যাপের ব্যাটারি নিষ্কাশনের সবচেয়ে গুরুত্বপূর্ণ উৎসগুলির মধ্যে একটি। নেটওয়ার্ক কার্যকলাপের সাথে সম্পর্কিত ব্যাটারি নিষ্কাশন কমাতে, আপনার সংযোগ মডেলটি অন্তর্নিহিত রেডিও হার্ডওয়্যারকে কীভাবে প্রভাবিত করবে তা বোঝা গুরুত্বপূর্ণ।

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

রেডিও স্টেট মেশিন

আপনার ব্যবহারকারীর ডিভাইসের ওয়্যারলেস রেডিওতে অন্তর্নির্মিত পাওয়ার-সেভিং বৈশিষ্ট্য রয়েছে যা এটির ব্যাটারি পাওয়ার খরচ কমাতে সাহায্য করে। সম্পূর্ণরূপে সক্রিয় থাকাকালীন, ওয়্যারলেস রেডিও উল্লেখযোগ্য শক্তি খরচ করে, কিন্তু যখন নিষ্ক্রিয় থাকে বা স্ট্যান্ডবাইতে থাকে, তখন রেডিও খুব কম শক্তি খরচ করে।

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

একটি সাধারণ 3G নেটওয়ার্ক রেডিওর স্টেট মেশিনে তিনটি শক্তি অবস্থা থাকে:

  • পূর্ণ শক্তি : যখন কোনও সংযোগ সক্রিয় থাকে তখন ব্যবহৃত হয়, যা ডিভাইসটিকে সর্বোচ্চ সম্ভাব্য হারে ডেটা স্থানান্তর করতে দেয়।
  • কম শক্তি : একটি মধ্যবর্তী অবস্থা যা ব্যাটারির শক্তি খরচ প্রায় ৫০% কমিয়ে দেয়।
  • স্ট্যান্ডবাই : সর্বনিম্ন বিদ্যুৎ খরচকারী অবস্থা যেখানে কোনও নেটওয়ার্ক সংযোগ সক্রিয় থাকে না।

যদিও লো এবং স্ট্যান্ডবাই অবস্থা উল্লেখযোগ্যভাবে কম ব্যাটারি খরচ করে, তারা নেটওয়ার্ক অনুরোধগুলিতে উল্লেখযোগ্য ল্যাটেন্সিও প্রবর্তন করে। লো অবস্থা থেকে পূর্ণ শক্তিতে ফিরে আসতে প্রায় 1.5 সেকেন্ড সময় লাগে, এবং স্ট্যান্ডবাই অবস্থা থেকে পূর্ণ শক্তিতে ফিরে আসতে 2 সেকেন্ডেরও বেশি সময় লাগতে পারে।

ল্যাটেন্সি কমাতে, স্টেট মেশিনটি নিম্ন শক্তির অবস্থায় রূপান্তর স্থগিত করার জন্য একটি বিলম্ব ব্যবহার করে। চিত্র 1 একটি সাধারণ 3G রেডিওর জন্য AT&T এর সময় ব্যবহার করে।


চিত্র ১. সাধারণ 3G ওয়্যারলেস রেডিও স্টেট মেশিন।

প্রতিটি ডিভাইসের রেডিও স্টেট মেশিন, বিশেষ করে সংশ্লিষ্ট ট্রানজিশন বিলম্ব ("টেইল টাইম") এবং স্টার্টআপ ল্যাটেন্সি, ব্যবহৃত ওয়্যারলেস রেডিও প্রযুক্তির (3G, LTE, 5G, ইত্যাদি) উপর ভিত্তি করে পরিবর্তিত হবে এবং ডিভাইসটি যে ক্যারিয়ার নেটওয়ার্কের উপর কাজ করছে তার দ্বারা সংজ্ঞায়িত এবং কনফিগার করা হবে।

এই পৃষ্ঠাটি AT&T দ্বারা প্রদত্ত তথ্যের উপর ভিত্তি করে একটি সাধারণ 3G ওয়্যারলেস রেডিওর জন্য একটি প্রতিনিধিত্বমূলক অবস্থা মেশিনের বর্ণনা দেয়। তবে, সাধারণ নীতি এবং ফলস্বরূপ সর্বোত্তম অনুশীলনগুলি সমস্ত ওয়্যারলেস রেডিও বাস্তবায়নের জন্য প্রযোজ্য।

এই পদ্ধতিটি সাধারণ মোবাইল ওয়েব ব্রাউজিংয়ের জন্য বিশেষভাবে কার্যকর কারণ এটি ব্যবহারকারীদের ওয়েব ব্রাউজ করার সময় অবাঞ্ছিত বিলম্বিতা প্রতিরোধ করে। তুলনামূলকভাবে কম টেল-টাইম নিশ্চিত করে যে ব্রাউজিং সেশন শেষ হয়ে গেলে, রেডিও কম শক্তির অবস্থায় যেতে পারে।

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

অ্যাপগুলি কীভাবে রেডিও স্টেট মেশিনকে প্রভাবিত করে

প্রতিবার যখন আপনি একটি নতুন নেটওয়ার্ক সংযোগ তৈরি করেন, তখন রেডিওটি পূর্ণ পাওয়ার অবস্থায় স্থানান্তরিত হয়। পূর্বে বর্ণিত সাধারণ 3G রেডিও স্টেট মেশিনের ক্ষেত্রে, এটি আপনার ট্রান্সফারের সময়কালের জন্য পূর্ণ পাওয়ারে থাকবে - এবং অতিরিক্ত 5 সেকেন্ড টেল টাইম থাকবে - তারপরে 12 সেকেন্ড কম শক্তি অবস্থায় থাকবে। সুতরাং একটি সাধারণ 3G ডিভাইসের জন্য, প্রতিটি ডেটা ট্রান্সফার সেশন রেডিওকে কমপক্ষে 18 সেকেন্ডের জন্য শক্তি সংগ্রহ করতে বাধ্য করবে।

বাস্তবে, এর অর্থ হল, যে অ্যাপটি এক সেকেন্ডে, মিনিটে তিনবার ডেটা স্থানান্তর করে, তা ওয়্যারলেস রেডিওকে চিরতরে সক্রিয় রাখবে, স্ট্যান্ডবাই মোডে প্রবেশ করার সময় এটিকে উচ্চ শক্তিতে ফিরিয়ে আনবে।


চিত্র ২। প্রতি মিনিটে তিনবার এক সেকেন্ড ট্রান্সফারের জন্য আপেক্ষিক ওয়্যারলেস রেডিও পাওয়ার ব্যবহার। চিত্রটি রানের মধ্যে "পাওয়ার আপ" ল্যাটেন্সি বাদ দেয়।

তুলনামূলকভাবে, যদি একই অ্যাপটি তার ডেটা ট্রান্সফারগুলিকে একত্রিত করে, প্রতি মিনিটে একবার তিন সেকেন্ডের ট্রান্সফার চালায়, তাহলে রেডিওটি প্রতি মিনিটে মাত্র ২০ সেকেন্ডের জন্য উচ্চ-শক্তির অবস্থায় থাকবে। এর ফলে রেডিওটি প্রতি মিনিটে ৪০ সেকেন্ডের জন্য স্ট্যান্ডবাইতে থাকবে, যার ফলে ব্যাটারি খরচ উল্লেখযোগ্যভাবে হ্রাস পাবে।


চিত্র ৩। প্রতি মিনিটে একবার চলমান তিন সেকেন্ডের ট্রান্সফারের জন্য আপেক্ষিক বেতার রেডিও পাওয়ার ব্যবহার।

অপ্টিমাইজেশন কৌশল

এখন যেহেতু আপনি বুঝতে পেরেছেন যে নেটওয়ার্ক অ্যাক্সেস ব্যাটারির আয়ুকে কীভাবে প্রভাবিত করে, আসুন ব্যাটারির খরচ কমাতে এবং দ্রুত এবং স্বাচ্ছন্দ্যময় ব্যবহারকারীর অভিজ্ঞতা প্রদানের জন্য আপনি যা করতে পারেন সে সম্পর্কে কিছু কথা বলি।

বান্ডিল ডেটা ট্রান্সফার

আগের অংশে যেমন বলা হয়েছে, আপনার ডেটা ট্রান্সফারগুলিকে এমনভাবে বান্ডিল করা যাতে আপনি কম ঘন ঘন বেশি ডেটা ট্রান্সফার করতে পারেন, ব্যাটারির দক্ষতা উন্নত করার অন্যতম সেরা উপায়।

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

ডেটা প্রিফেচ করুন

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

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

প্রিফেচিং কোনও কাজ সম্পাদন করার আগে বা ডেটা দেখার আগে ডাউনলোড সম্পূর্ণ হওয়ার জন্য অপেক্ষা করার ফলে সৃষ্ট অ্যাপ-মধ্যস্থ লেটেন্সি কমিয়ে উন্নত ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

এখানে একটি ব্যবহারিক উদাহরণ দেওয়া হল।

একজন সংবাদ পাঠক

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

এই পদ্ধতি ব্যবহার করে, রেডিও ব্যবহারকারীদের বেশিরভাগ সংবাদ-পঠন সেশনের সময় সক্রিয় থাকতে বাধ্য করা হয় কারণ তারা শিরোনাম স্ক্রোল করে, বিভাগ পরিবর্তন করে এবং নিবন্ধ পড়ে। শুধু তাই নয়, শক্তির অবস্থার মধ্যে ক্রমাগত পরিবর্তনের ফলে বিভাগ পরিবর্তন করার সময় বা নিবন্ধ পড়ার সময় উল্লেখযোগ্য বিলম্ব ঘটে।

একটি ভালো পদ্ধতি হল স্টার্টআপে যুক্তিসঙ্গত পরিমাণে ডেটা আগে থেকে আনা, প্রথম সেটের সংবাদ শিরোনাম এবং থাম্বনেইল দিয়ে শুরু করা - কম-বিলম্বিত স্টার্টআপ সময় নিশ্চিত করে - এবং বাকি শিরোনাম এবং থাম্বনেইল দিয়ে চালিয়ে যাওয়া, সেইসাথে কমপক্ষে প্রাথমিক শিরোনাম তালিকা থেকে উপলব্ধ প্রতিটি নিবন্ধের জন্য নিবন্ধের পাঠ্য।

আরেকটি বিকল্প হল প্রতিটি শিরোনাম, থাম্বনেইল, নিবন্ধের লেখা, এমনকি সম্ভবত সম্পূর্ণ নিবন্ধের ছবিও আগে থেকে আনা—সাধারণত একটি পূর্বনির্ধারিত সময়সূচীর পটভূমিতে। এই পদ্ধতির ফলে এমন সামগ্রী ডাউনলোড করার ক্ষেত্রে উল্লেখযোগ্য ব্যান্ডউইথ এবং ব্যাটারি লাইফ নষ্ট হওয়ার ঝুঁকি থাকে যা কখনও ব্যবহার করা হয়নি, তাই এটি সতর্কতার সাথে প্রয়োগ করা উচিত।

অতিরিক্ত বিবেচ্য বিষয়

যদিও প্রিফেচিং ডেটা অনেক সুবিধা বহন করে, তবুও খুব বেশি আক্রমণাত্মকভাবে প্রিফেচিং ব্যবহার করলে ব্যাটারির খরচ এবং ব্যান্ডউইথের ব্যবহার বৃদ্ধির ঝুঁকি থাকে—এবং ডাউনলোড কোটাও বৃদ্ধি পায়—অব্যবহৃত ডেটা ডাউনলোড করে। অ্যাপটি প্রিফেচ সম্পূর্ণ হওয়ার জন্য অপেক্ষা করার সময় প্রিফেচিং যাতে অ্যাপ্লিকেশন শুরু করতে বিলম্ব না করে তা নিশ্চিত করাও গুরুত্বপূর্ণ। ব্যবহারিক অর্থে এর অর্থ হতে পারে ধীরে ধীরে ডেটা প্রক্রিয়াকরণ করা, অথবা ধারাবাহিকভাবে স্থানান্তর শুরু করা যাতে অ্যাপ্লিকেশন শুরু করার জন্য প্রয়োজনীয় ডেটা প্রথমে ডাউনলোড এবং প্রক্রিয়া করা হয়।

আপনি কতটা আক্রমণাত্মকভাবে ডেটা প্রিফেচ করবেন তা নির্ভর করে ডাউনলোড করা ডেটার আকার এবং এটি ব্যবহারের সম্ভাবনার উপর। পূর্বে বর্ণিত স্টেট মেশিনের উপর ভিত্তি করে, একটি মোটামুটি নির্দেশিকা হিসাবে, বর্তমান ব্যবহারকারীর সেশনের মধ্যে যে ডেটা ব্যবহারের সম্ভাবনা ৫০%, সেগুলির জন্য আপনি সাধারণত প্রায় ৬ সেকেন্ড (প্রায় ১-২ মেগাবাইট) জন্য প্রিফেচ করতে পারেন, অব্যবহৃত ডেটা ডাউনলোড করার সম্ভাব্য খরচ সেই ডেটা ডাউনলোড না করার সম্ভাব্য সাশ্রয়ের সাথে মেলে, শুরুতে।

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

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

একটি সমাধান হল সম্পূর্ণ ডাউনলোডের সময়সূচী নির্ধারণ করা যাতে শুধুমাত্র Wi-Fi এর সাথে সংযুক্ত থাকাকালীন হয়, এবং সম্ভবত শুধুমাত্র যখন ডিভাইসটি চার্জ করা হচ্ছে। WorkManager API ঠিক এই ব্যবহারের ক্ষেত্রে সমর্থন করে, যা আপনাকে ব্যাকগ্রাউন্ডের কাজ সীমাবদ্ধ করার অনুমতি দেয় যতক্ষণ না ডিভাইসটি ডেভেলপার-নির্দিষ্ট মানদণ্ড পূরণ করে, যেমন চার্জ করা এবং Wi-Fi এর সাথে সংযুক্ত থাকা।

অনুরোধ করার আগে সংযোগ পরীক্ষা করুন

মোবাইল ডিভাইসে সেল সিগন্যাল খোঁজা সবচেয়ে বেশি বিদ্যুৎ খরচ করে এমন একটি কাজ। ব্যবহারকারীর অনুরোধের জন্য সবচেয়ে ভালো পদ্ধতি হল প্রথমে ConnectivityManager ব্যবহার করে সংযোগ পরীক্ষা করা, যেমনটি মনিটর কানেক্টিভিটি স্ট্যাটাস এবং কানেকশন মিটারিং- এ দেখানো হয়েছে। যদি কোনও নেটওয়ার্ক না থাকে, তাহলে অ্যাপটি মোবাইল রেডিওকে অনুসন্ধান করতে বাধ্য না করে ব্যাটারি সাশ্রয় করতে পারে। তারপর সংযোগ তৈরির সময় অনুরোধটি অন্যান্য অনুরোধের সাথে একটি ব্যাচে নির্ধারিত এবং সম্পাদন করা যেতে পারে।

পুল সংযোগ

ব্যাচিং এবং প্রিফেচিং ছাড়াও, একটি অতিরিক্ত কৌশল যা সাহায্য করতে পারে তা হল আপনার অ্যাপের নেটওয়ার্ক সংযোগগুলিকে একত্রিত করা।

নতুন নেটওয়ার্ক সংযোগ চালু করার চেয়ে বিদ্যমান নেটওয়ার্ক সংযোগগুলি পুনঃব্যবহার করা সাধারণত বেশি কার্যকর। সংযোগগুলি পুনঃব্যবহারের ফলে নেটওয়ার্কটি যানজট এবং সম্পর্কিত নেটওয়ার্ক ডেটা সমস্যার ক্ষেত্রে আরও বুদ্ধিমত্তার সাথে প্রতিক্রিয়া জানাতে সক্ষম হয়।

HttpURLConnection এবং বেশিরভাগ HTTP ক্লায়েন্ট, যেমন OkHttp , ডিফল্টরূপে সংযোগ-পুলিং সক্ষম করে এবং একাধিক অনুরোধের জন্য একই সংযোগ পুনঃব্যবহার করে।

সংক্ষিপ্তসার এবং সামনের দিকে তাকানো

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

পরবর্তী বিভাগে, আমরা বেশিরভাগ অ্যাপের জন্য সাধারণ তিনটি স্বতন্ত্র ধরণের নেটওয়ার্ক ইন্টারঅ্যাকশন সম্পর্কে বিস্তারিত আলোচনা করব। আপনি এই ধরণের প্রতিটির জন্য ড্রাইভারের পাশাপাশি আধুনিক কৌশল এবং এই ইন্টারঅ্যাকশনগুলি দক্ষতার সাথে পরিচালনা করার জন্য API শিখবেন।