নেটওয়ার্ক নির্বাচন

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

নেটওয়ার্ক নির্বাচন আচরণ

এই বিভাগটি Android 12 বা তার উচ্চতর সংস্করণে এবং Android 11 এবং তার পরে চলমান ডিভাইসগুলির জন্য নেটওয়ার্ক নির্বাচন আচরণ বর্ণনা করে৷

অ্যান্ড্রয়েড 12

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

একটি নেটওয়ার্ক এজেন্ট ( NetworkAgent ) POLICY_TRANSPORT_PRIMARY পতাকা ব্যবহার করে তা নির্দিষ্ট করতে যে নেটওয়ার্কটি পছন্দ করা হয় যখন একই পরিবহনের একাধিক নেটওয়ার্ক উপস্থিত থাকে৷ এটির একটি সাধারণ উদাহরণ হল একটি ডুয়াল-সিম ডিভাইস যার সাথে সেটিংসে একটি সুইচ ব্যবহারকারীকে ডিফল্টভাবে কোন সিম কার্ড ব্যবহার করতে হবে তা চয়ন করতে দেয়৷ একটি প্রদত্ত পরিবহনের মধ্যে, Android পতাকাবিহীন নেটওয়ার্কের উপর POLICY_TRANSPORT_PRIMARY পতাকা সহ একটি নেটওয়ার্ক পছন্দ করে৷

একটি নেটওয়ার্ক এজেন্ট একটি নেটওয়ার্ক সনাক্ত করতে POLICY_EXITING পতাকা ব্যবহার করে যা শীঘ্রই সংযোগ বিচ্ছিন্ন হবে বলে আশা করা হচ্ছে৷ এটির একটি সাধারণ উদাহরণ হল যখন একজন ব্যবহারকারী নেটওয়ার্কের সীমার বাইরে চলে যাওয়ার সাথে সাথে একটি Wi-Fi নেটওয়ার্কের গুণমান হ্রাস পায়। এই পতাকা ছাড়া অন্য নেটওয়ার্ক উপলব্ধ থাকলে Android এই পতাকা সহ একটি নেটওয়ার্ক ব্যবহার করা এড়িয়ে যায়৷ প্রতিটি পৃথক নেটওয়ার্ক এজেন্ট নির্ধারণ করতে পারে কখন একটি নেটওয়ার্ক যথেষ্ট অবনতি হয় যা প্রস্থান করার জন্য বিবেচনা করা হয়।

NetworkScore ক্লাস একটি নেটওয়ার্ক এজেন্টকে ঘোষণা করার অনুমতি দেয় যে KEEP_CONNECTED_FOR_HANDOVER পতাকা এবং NetworkScore.Builder.setKeepConnectedReason পদ্ধতি ব্যবহার করে নেটওয়ার্ক রাখা হবে। এই KEEP_CONNECTED_FOR_HANDOVER পতাকাটি সম্ভাব্য নেটওয়ার্কগুলির জন্য উপযোগী যা নেটওয়ার্কের কার্যক্ষমতা মূল্যায়ন না হওয়া পর্যন্ত একটি নেটওয়ার্ক এজেন্টকে একটি সেকেন্ডারি Wi-Fi STA-তে এটিকে প্রাথমিক নেটওয়ার্ক না বানিয়ে একটি নেটওয়ার্ক আনতে দেয়৷ যদি একটি নেটওয়ার্ক এজেন্ট এই পতাকাটি ঘোষণা না করে, তাহলে এজেন্টের একটি নেটওয়ার্কের কর্মক্ষমতা মূল্যায়ন করার সুযোগ পাওয়ার আগে কোনো অনুরোধের পরিচর্যা না করার জন্য সম্ভাব্য নেটওয়ার্কগুলি ভেঙে দেওয়া হয়।

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

নেটওয়ার্ক নির্বাচন বৈশিষ্ট্যের বাস্তবায়ন AOSP-এর কানেক্টিভিটি মডিউলে রয়েছে। নেটওয়ার্ক নির্বাচনের নীতি লজিক NetworkRanker ক্লাস এবং এর সহায়ক ক্লাসে পাওয়া যায়। এর মানে হল যে ডিভাইস নির্মাতারা সরাসরি নেটওয়ার্ক নির্বাচন কোড কাস্টমাইজ করতে পারে না কিন্তু পরিবর্তে নেটওয়ার্ক সম্পর্কে প্রয়োজনীয় তথ্য জানাতে NetworkScore পতাকা ব্যবহার করতে হবে।

অ্যান্ড্রয়েড 11

Android 11 বা তার নিচের সংস্করণে চলমান ডিভাইসগুলির জন্য, Android একটি নেটওয়ার্ক এজেন্ট ( NetworkAgent ) এর বাস্তবায়ন থেকে পাঠানো একটি সাধারণ পূর্ণসংখ্যার ভিত্তিতে নেটওয়ার্ক নির্বাচন করে। প্রতিটি অনুরোধের জন্য, Android সর্বোচ্চ সাংখ্যিক স্কোর সহ নেটওয়ার্ক নির্বাচন করে যা অনুরোধটি পূরণ করতে পারে। এই সাংখ্যিক স্কোরটি নেটওয়ার্ক এজেন্ট দ্বারা প্রেরিত পূর্ণসংখ্যার সমন্বয়ে গঠিত এবং অতিরিক্ত বোনাস বা জরিমানা প্রদান করা হয় যেমন নেটওয়ার্কটি যাচাই করা হয়েছে কিনা বা নেটওয়ার্কটি একটি VPN কিনা। নীতিগত সিদ্ধান্ত নেওয়ার জন্য পৃথক নেটওয়ার্ক এজেন্ট একে অপরের সাথে সিঙ্ক্রোনাইজ করে।

যদি দুটি নেটওয়ার্ক একটি প্রদত্ত অনুরোধ পরিবেশন করতে পারে এবং একই সাংখ্যিক স্কোর থাকে তবে আচরণটি অনির্ধারিত।

নেটওয়ার্কস্কোর ক্লাস

নেটওয়ার্ক নির্বাচন বৈশিষ্ট্যের কেন্দ্রীয় শ্রেণী হল NetworkScore । এই ক্লাসে উপলব্ধ পতাকাগুলির API এবং ডকুমেন্টেশন এবং setKeepConnectedReason পদ্ধতি রয়েছে।

NetworkScore ক্লাসটি অবশ্যই এর বিল্ডার ক্লাসের মাধ্যমে তৈরি করতে হবে এবং প্রারম্ভিক হওয়ার পরে NetworkAgent কনস্ট্রাক্টরের কাছে পাস করতে হবে। NetworkAgent#sendNetworkScore পদ্ধতি ব্যবহার করে যে কোনো সময় নেটওয়ার্ক স্কোর আপডেট করা যেতে পারে।

নেটওয়ার্ক এজেন্ট বাস্তবায়ন উদাহরণ

AOSP বিভিন্ন নেটওয়ার্ক এজেন্টের উদাহরণ বাস্তবায়ন অন্তর্ভুক্ত করে। নিম্নলিখিত উদাহরণ বাস্তবায়ন:

  • TelephonyNetworkAgent : মোবাইল নেটওয়ার্কের জন্য নীতি যোগাযোগ করতে নেটওয়ার্ক স্কোর ব্যবহার করে
  • ClientModeImpl.WifiNetworkAgent : Wi-Fi নেটওয়ার্কের জন্য নীতি যোগাযোগ করতে নেটওয়ার্ক স্কোর ব্যবহার করে। এই বাস্তবায়নে POLICY_EXITING পতাকা ব্যবহার করে নেটওয়ার্ক স্কোরের জন্য লিগ্যাসি পূর্ণসংখ্যার সাথে পশ্চাদগামী সামঞ্জস্য রয়েছে।

ডিভাইসগুলি Android 12-এ আপগ্রেড হচ্ছে

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

নেটওয়ার্ক এজেন্টদের জন্য যারা অভ্যন্তরীণ NetworkFactory ক্লাস ব্যবহার করে, তাদের অবশ্যই একটি NetworkScore অবজেক্টে তাদের স্কোর ফিল্টার প্রকাশ করতে হবে যা ফ্যাক্টরি তৈরি করতে পারে এমন নেটওয়ার্কের সবচেয়ে শক্তিশালী স্কোর উপস্থাপন করে। এর কারণ হল Android 12-এ NetworkFactory ক্লাস শুধুমাত্র সেই অনুরোধগুলি পাস করে যেগুলি Android 11 এবং তার নিচের সমস্ত অনুরোধের পরিবর্তে NetworkFactory তে ঘোষিত স্কোর ফিল্টারের সাথে মেলে।

আমরা সহজ বাস্তবায়ন এবং ব্যাটারি সাশ্রয়ের জন্য একটি ফিল্টার পাস করার পরামর্শ দিই যাতে সমস্ত অনুরোধ NetworkFactory পাস না হয়৷ যাইহোক, যদি আপনার কাস্টম বাস্তবায়নের জন্য প্রয়োজন হয় যে সমস্ত অনুরোধ NetworkFactory পাঠানো হবে, আপনি নিয়মিত NetworkFactory.register পদ্ধতির পরিবর্তে NetworkFactory.registerIgnoringScore নিবন্ধন করতে পারেন। এই পদ্ধতিটি ব্যবহার করলে, আমরা এমন একটি স্কোর ফিল্টার পাস করার পরামর্শ দিই যা ফ্যাক্টরিটি পূরণ করতে পারে না এমন অনুরোধগুলিকে মূল্যায়ন না করে ব্যাটারি বাঁচানোর জন্য ফ্যাক্টরি তৈরি করতে পারে এমন সেরা স্কোরটি সবচেয়ে সঠিকভাবে উপস্থাপন করে৷

বৈধতা

একটি Android ডিভাইসে নেটওয়ার্ক নির্বাচনের আচরণ যাচাই করতে, নিম্নলিখিত পরীক্ষাগুলি ব্যবহার করুন:

ভুল বাস্তবায়নের ফলে ডিভাইসের ডিফল্ট নেটওয়ার্ক নির্বাচন করা সহ ( ConnectivityManager.registerDefaultNetworkCallback এর সাথে একটি নেটওয়ার্ক কলব্যাক ব্যবহার করার সময় সিস্টেম অ্যাপে যে নেটওয়ার্ক পাঠায়) সহ NetworkCallback এর ব্যবহারের প্রতিক্রিয়া হিসাবে অ্যাপগুলিতে অপ্রত্যাশিত নেটওয়ার্কগুলি ফিরে আসতে পারে।

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