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

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

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

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

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

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

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

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

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

লেটেন্সি কমাতে, স্টেট মেশিন ট্রানজিশন স্থগিত করার জন্য বিলম্ব ব্যবহার করে কম এনার্জি স্টেটে। ছবি ১-এ AT&T-এর টাইমিং ব্যবহার করে সাধারণ 3G রেডিও দেখানো হয়েছে।


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

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

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

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

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

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

আপনি যখনই একটি নতুন নেটওয়ার্ক কানেকশন তৈরি করেন, রেডিওটি ফুল পাওয়ার স্টেটে ট্রানজিশন করে। আগে বর্ণিত সাধারণ 3G রেডিও স্টেট মেশিনের ক্ষেত্রে, আপনার ট্রান্সফারের সময়কাল জুড়ে এটি সম্পূর্ণ শক্তিতে থাকবে—সাথে অতিরিক্ত ৫ সেকেন্ডের টেল টাইম—তারপরে ১২ সেকেন্ড কম শক্তি স্টেটে থাকবে। তাই, সাধারণ 3G ডিভাইসের ক্ষেত্রে, প্রতিটি ডেটা ট্রান্সফার সেশনের জন্য রেডিওকে কমপক্ষে ১৮ সেকেন্ডের জন্য শক্তি খরচ করতে হবে।

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


ছবি ২. প্রতি মিনিটে তিনবার এক সেকেন্ডের ট্রান্সফার চালানোর জন্য আপেক্ষিক ওয়্যারলেস রেডিও পাওয়ার ব্যবহার। রান করার মধ্যে "পাওয়ার আপ" লেটেন্সি এই সংখ্যায় অন্তর্ভুক্ত নয়।

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


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

অপ্টিমাইজেশন সংক্রান্ত কৌশল

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

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

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

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

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

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

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

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

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

একজন নিউজ রিডার

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

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

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

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

বিবেচনায় রাখার মতো আরও জিনিস

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

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

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

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

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

অনুরোধ করার আগে কানেক্টিভিটি চেক করুন

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

পুল কানেকশন

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

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

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

রিক্যাপ ও ভবিষ্যতের কথা ভেবে প্ল্যান করা

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

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