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

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

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

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

অ্যান্ড্রয়েড ১২

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

বৈধতা

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

  • NetworkScoreTest সিটিএস পরীক্ষা
  • NetworkRanker ইউনিট পরীক্ষা

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

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