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

চিত্র ১. নেটওয়ার্ক ট্র্যাফিক ট্র্যাকিং। নেটওয়ার্ক ট্র্যাফিক প্যাটার্ন থেকে বোঝা যায় যে অনুরোধগুলি প্রিফেচিং করে বা আপলোডগুলি বান্ডিল করে দক্ষতা নাটকীয়ভাবে উন্নত করা যেতে পারে।
আপনার ডেটা ট্রান্সফারের ফ্রিকোয়েন্সি এবং প্রতিটি সংযোগের সময় স্থানান্তরিত ডেটার পরিমাণ পর্যবেক্ষণ করে, আপনি আপনার অ্যাপ্লিকেশনের এমন ক্ষেত্রগুলি সনাক্ত করতে পারেন যেগুলিকে আরও ব্যাটারি-সাশ্রয়ী করা যেতে পারে। সাধারণত, আপনি এমন ছোট স্পাইকগুলি খুঁজবেন যা বিলম্বিত হতে পারে।
ট্রান্সফার স্পাইকের কারণ আরও ভালোভাবে শনাক্ত করার জন্য, Traffic Stats API আপনাকে TrafficStats.setThreadStatsTag() ব্যবহার করে একটি নির্দিষ্ট থ্রেডের মধ্যে একটি সকেট থেকে সংঘটিত ডেটা ট্রান্সফার ট্যাগ করতে সক্ষম করে। এই ফাংশনটি কল করলে একটি নির্দিষ্ট থ্রেডের জন্য সমস্ত ট্র্যাফিক স্বয়ংক্রিয়ভাবে ট্যাগ হয় না; ট্যাগগুলি সকেটে প্রয়োগ করতে হয়।
একবার থ্রেড ট্যাগ সেট হয়ে গেলে, আপনি TrafficStats.tagSocket() এবং TrafficStats.untagSocket() ব্যবহার করে পৃথক সকেটগুলিকে ম্যানুয়ালি ট্যাগ এবং আনট্যাগ করতে পারেন। থ্রেডে একটি সকেট খোলা থাকলে, অথবা একটি সার্ভার সকেট একটি সংযোগ গ্রহণ করলেও একটি ট্যাগ প্রয়োগ করা হয়।
একাধিক থ্রেড দ্বারা একই সকেটে একযোগে অ্যাক্সেসের জন্য নেটওয়ার্ক প্যাকেটগুলি পাঠানো বা গ্রহণ করার সময় সকেটে থাকা যেকোনো ট্যাগ ব্যবহার করা হবে (যা ব্যবহারকারী যখন ডেটা লিখেছিলেন বা পড়েছিলেন তার থেকে আলাদা হতে পারে, বাফারিং এবং পুনঃপ্রেরণের কারণে)।
উদাহরণস্বরূপ, আপনি বিভিন্ন ধরণের নেটওয়ার্ক ট্র্যাফিক উপস্থাপনের জন্য ধ্রুবক সংজ্ঞায়িত করতে পারেন, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:
কোটলিন
const val USER_INITIATED = 0x1000 const val APP_INITIATED = 0x2000 const val SERVER_INITIATED = 0x3000
জাভা
public static final int USER_INITIATED = 0x1000; public static final int APP_INITIATED = 0x2000; public static final int SERVER_INITIATED = 0x3000;
এরপর আপনি আপনার নেটওয়ার্ক অনুরোধগুলিকে সেই অনুযায়ী ট্যাগ করতে পারেন:
কোটলিন
TrafficStats.setThreadStatsTag(USER_INITIATED) TrafficStats.tagSocket(outputSocket) // Transfer data using socket TrafficStats.untagSocket(outputSocket)
জাভা
TrafficStats.setThreadStatsTag(USER_INITIATED); TrafficStats.tagSocket(outputSocket); // Transfer data using socket TrafficStats.untagSocket(outputSocket);
HttpURLConnection লাইব্রেরি স্বয়ংক্রিয়ভাবে বর্তমান TrafficStats.getThreadStatsTag() মানের উপর ভিত্তি করে সকেটগুলিকে ট্যাগ করে। নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে, লাইব্রেরিটি keep-alive পুলের মাধ্যমে পুনর্ব্যবহার করা হলে সকেটগুলিকে ট্যাগ এবং আনট্যাগ করে:
কোটলিন
class IdentifyTransferSpikeTask { @WorkerThread fun request(url: String) { TrafficStats.setThreadStatsTag(APP_INITIATED) // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag() } }
জাভা
public class IdentifyTransferSpikeTask { @WorkerThread public void request(String url) { TrafficStats.setThreadStatsTag(APP_INITIATED); // Make network request using HttpURLConnection.connect() ... TrafficStats.clearThreadStatsTag(); } }
নেটওয়ার্ক ট্র্যাফিকের ধরণ বিশ্লেষণ করুন
যখন আপনি আপনার অ্যাপ দ্বারা উৎপন্ন নেটওয়ার্ক ট্র্যাফিক দেখেন, তখন আপনাকে ট্র্যাফিকের উৎস বুঝতে হবে যাতে আপনি এটিকে যথাযথভাবে অপ্টিমাইজ করতে পারেন। আপনার অ্যাপ দ্বারা উৎপন্ন ঘন ঘন নেটওয়ার্ক অ্যাক্টিভিটি সম্পূর্ণরূপে উপযুক্ত হতে পারে যদি এটি ব্যবহারকারীর ক্রিয়াকলাপের প্রতিক্রিয়া জানায়, তবে আপনার অ্যাপটি যদি সামনে না থাকে বা ডিভাইসটি পকেটে বা পার্সে থাকে তবে সম্পূর্ণ অনুপযুক্ত।
ব্যবহারকারী-প্রবর্তিত ট্র্যাফিক বিশ্লেষণ করুন
ব্যবহারকারীর দ্বারা শুরু করা নেটওয়ার্ক ট্র্যাফিক দক্ষতার সাথে একসাথে গোষ্ঠীভুক্ত হতে পারে যখন একজন ব্যবহারকারী আপনার অ্যাপের মধ্যে একটি নির্দিষ্ট কাজ সম্পাদন করছেন, অথবা ব্যবহারকারী যখন আপনার অ্যাপের জন্য প্রয়োজনীয় অতিরিক্ত তথ্যের অনুরোধ করেন তখন অসমভাবে ছড়িয়ে পড়ে। ব্যবহারকারীর দ্বারা শুরু করা নেটওয়ার্ক ট্র্যাফিক বিশ্লেষণ করার ক্ষেত্রে আপনার লক্ষ্য হল সময়ের সাথে সাথে ঘন ঘন নেটওয়ার্ক ব্যবহারের ধরণগুলি সন্ধান করা এবং অনুরোধগুলিকে একসাথে গোষ্ঠীভুক্ত করে তাদের ফ্রিকোয়েন্সি হ্রাস করার চেষ্টা করা।
ব্যবহারকারীর অনুরোধের অপ্রত্যাশিততার কারণে আপনার অ্যাপে এই ধরণের নেটওয়ার্ক ব্যবহারের অপটিমাইজেশন করা কঠিন হয়ে পড়ে। এছাড়াও, ব্যবহারকারীরা যখন সক্রিয়ভাবে কোনও অ্যাপ ব্যবহার করেন তখন দ্রুত প্রতিক্রিয়া আশা করেন, তাই দক্ষতার জন্য অনুরোধ বিলম্বিত করলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হতে পারে। সাধারণভাবে, যখন কোনও ব্যবহারকারী আপনার অ্যাপের সাথে সরাসরি যোগাযোগ করছেন তখন নেটওয়ার্কের দক্ষ ব্যবহারের চেয়ে ব্যবহারকারীর দ্রুত প্রতিক্রিয়াকে অগ্রাধিকার দেওয়া উচিত।
ব্যবহারকারী-প্রেরিত ট্র্যাফিক অপ্টিমাইজ করার জন্য সুপারিশের জন্য, ব্যবহারকারী-প্রেরিত অনুরোধগুলি অপ্টিমাইজ করুন দেখুন।
অ্যাপ-ইনিশিয়েটেড ট্র্যাফিক বিশ্লেষণ করুন
অ্যাপ-ইনিশিয়েটেড নেটওয়ার্ক ট্র্যাফিক সাধারণত এমন একটি ক্ষেত্র যেখানে আপনি নেটওয়ার্ক ব্যান্ডউইথের দক্ষ ব্যবহারের উপর উল্লেখযোগ্য প্রভাব ফেলতে পারেন। আপনার অ্যাপের নেটওয়ার্ক অ্যাক্টিভিটি বিশ্লেষণ করার সময়, নিষ্ক্রিয়তার সময়কালগুলি সন্ধান করুন এবং সেগুলি বাড়ানো যেতে পারে কিনা তা নির্ধারণ করুন। যদি আপনি আপনার অ্যাপ থেকে ধারাবাহিক নেটওয়ার্ক অ্যাক্সেসের ধরণ দেখতে পান, তাহলে এই ট্র্যাফিকটিকে ব্যাচ করার চেষ্টা করুন যাতে ডিভাইস রেডিওটি কার্যকলাপের সময়কালের মধ্যে কম-পাওয়ার মোডে ফিরে যেতে পারে।
অ্যাপ-ইনিশিয়েটেড ট্র্যাফিক অপ্টিমাইজ করার জন্য সুপারিশের জন্য, অ্যাপ-ইনিশিয়েটেড অনুরোধ অপ্টিমাইজ করুন দেখুন।
সার্ভার-ইনিশিয়েটেড ট্র্যাফিক বিশ্লেষণ করুন
আপনার অ্যাপের সাথে যোগাযোগকারী সার্ভারগুলির দ্বারা শুরু হওয়া নেটওয়ার্ক কার্যকলাপ সাধারণত এমন একটি ক্ষেত্র যেখানে আপনি নেটওয়ার্ক ব্যান্ডউইথের দক্ষ ব্যবহারের উপর উল্লেখযোগ্য প্রভাব ফেলতে পারেন। ফায়ারবেস ক্লাউড মেসেজিং (FCM) হল একটি হালকা প্রক্রিয়া যা একটি সার্ভার থেকে একটি নির্দিষ্ট অ্যাপ ইনস্ট্যান্সে ডেটা প্রেরণ করতে ব্যবহৃত হয়। FCM ব্যবহার করে, আপনার সার্ভার একটি নির্দিষ্ট ডিভাইসে চলমান আপনার অ্যাপটিকে অবহিত করতে পারে যে এর জন্য নতুন ডেটা উপলব্ধ রয়েছে।
সার্ভার-ইনিশিয়েটেড ট্র্যাফিক অপ্টিমাইজ করার জন্য সুপারিশের জন্য, সার্ভার-ইনিশিয়েটেড অনুরোধগুলি অপ্টিমাইজ করুন দেখুন।
নেটওয়ার্ক ট্র্যাফিক প্রভাব কল্পনা করতে ব্যাটারি ইতিহাসবিদ ব্যবহার করুন
ব্যাটারি হিস্টোরিয়ান হল এমন একটি টুল যা নির্দিষ্ট সময়ের মধ্যে একটি ডিভাইসের ব্যাটারি খরচ কল্পনা করে। আপনার নেটওয়ার্ক কার্যকলাপ ব্যাটারি খরচকে কীভাবে প্রভাবিত করে তা বিশ্লেষণ করতে আপনি এই টুলটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, ব্যাটারি হিস্টোরিয়ান আপনাকে দেখাতে পারে যে আপনার অ্যাপটি আপনার প্রত্যাশার চেয়ে বেশি ঘন ঘন সেলুলার রেডিও ব্যবহার করছে কিনা। ব্যাটারি হিস্টোরিয়ান ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ব্যাটারিস্ট্যাটস সহ প্রোফাইল ব্যাটারি ব্যবহার এবং ব্যাটারি হিস্টোরিয়ান দেখুন।