নেটওয়ার্ক সমস্যা সমাধান করুন

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

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

অনুরোধগুলি নিরীক্ষণ করতে নেটওয়ার্ক প্রোফাইলার ব্যবহার করুন

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



চিত্র 1. নেটওয়ার্ক ট্র্যাফিক ট্র্যাকিং। নেটওয়ার্ক ট্র্যাফিক প্যাটার্ন পরামর্শ দেয় যে প্রিফেচিং রিকোয়েস্ট বা আপলোড বান্ডিল করে দক্ষতা নাটকীয়ভাবে উন্নত করা যেতে পারে।

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

স্থানান্তর স্পাইকের কারণ আরও ভালভাবে শনাক্ত করতে, ট্রাফিক স্ট্যাটস 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() মানের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে সকেট ট্যাগ করে। লাইব্রেরি সকেট ট্যাগ ও আনট্যাগ করে যখন কিপ-অ্যালাইভ পুলের মাধ্যমে পুনর্ব্যবহার করা হয় যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

কোটলিন

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 ব্যবহার করে, আপনার সার্ভার একটি নির্দিষ্ট ডিভাইসে চলমান আপনার অ্যাপকে বিজ্ঞপ্তি দিতে পারে যে এটির জন্য নতুন ডেটা উপলব্ধ রয়েছে।

সার্ভার-সূচিত ট্র্যাফিক অপ্টিমাইজ করার সুপারিশের জন্য, সার্ভার-সূচিত অনুরোধগুলি অপ্টিমাইজ করুন দেখুন।

নেটওয়ার্ক ট্রাফিক প্রভাব কল্পনা করতে ব্যাটারি হিস্টোরিয়ান ব্যবহার করুন

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