এই পৃষ্ঠায় বর্ণনা করা হয়েছে যে কীভাবে Android একই সাথে উপলভ্য নেটওয়ার্কের মধ্যে থেকে একটি বেছে নেয়। এই নেটওয়ার্ক বেছে নেওয়ার মেকানিজম Android কীভাবে অ্যাপ ও সিস্টেম নেটওয়ার্ক সংক্রান্ত অনুরোধ পূরণ করে এবং কীভাবে Android কোনও অ্যাপের জন্য ডিফল্ট নেটওয়ার্ক বেছে নেয় তার উপর প্রভাব ফেলে।
নেটওয়ার্ক বেছে নেওয়ার আচরণ
এই বিভাগে Android 12 বা তার পরের যেকোনও ভার্সনে চলে এমন ডিভাইস এবং Android 11 (API লেভেল 30) ও তার আগের যেকোনও ভার্সনে চলে এমন ডিভাইসের জন্য নেটওয়ার্ক বেছে নেওয়ার আচরণ বর্ণনা করা হয়েছে।
Android 12
Android 12 বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসের জন্য, উপলভ্য নেটওয়ার্কের মধ্যে থেকে বেছে নিতে Android
NetworkScore ক্লাস ব্যবহার করে। এই ক্লাস
নীতি সংক্রান্ত সিদ্ধান্ত নেওয়ার জন্য ফ্ল্যাগ কন্টেন করে। প্রতিটি ফ্ল্যাগ নেটওয়ার্ক বেছে নেওয়ার জন্য গুরুত্বপূর্ণ
অ্যাট্রিবিউটকে বোঝায়।
একাধিক নেটওয়ার্ক এজেন্ট (NetworkAgent) POLICY_TRANSPORT_PRIMARY
ফ্ল্যাগ ব্যবহার করে এটি নির্দিষ্ট করে যে একই ট্রান্সপোর্টের
একাধিক নেটওয়ার্ক উপস্থিত থাকলে Android সেই নেটওয়ার্ককে অগ্রাধিকার দেয়। যেমন, ডুয়াল-সিম ডিভাইসে সেটিংস বিকল্পের মধ্যে একটি সুইচ থাকে যা আপনাকে ডিফল্ট হিসেবে কোন সিম কার্ড ব্যবহার করবেন তা বেছে নিতে দেয়।
নির্দিষ্ট ট্রান্সপোর্টের মধ্যে, Android POLICY_TRANSPORT_PRIMARY
ফ্ল্যাগ সহ নেটওয়ার্ককে ফ্ল্যাগ ছাড়া নেটওয়ার্কের
তুলনায় বেশি অগ্রাধিকার দেয়।
ডিসকানেক্ট হওয়ার সম্ভাবনা আছে এমন নেটওয়ার্ক শনাক্ত করতে, নেটওয়ার্ক এজেন্ট POLICY_EXITING ফ্ল্যাগ ব্যবহার করে।
যেমন, কোনও ব্যবহারকারী নেটওয়ার্ক রেঞ্জের বাইরে চলে গেলে ওয়াই-ফাই নেটওয়ার্কের কোয়ালিটি খারাপ হয়ে যায়।
Android এই ফ্ল্যাগ সহ নেটওয়ার্ক ব্যবহার করা এড়িয়ে যায়
যদি এটি ছাড়া অন্য নেটওয়ার্ক উপলভ্য থাকে। প্রতিটি নেটওয়ার্ক এজেন্ট নির্ধারণ করতে পারে
কখন নেটওয়ার্কের পারফর্ম্যান্স এতটাই খারাপ হয়ে যায় যে সেটি থেকে বেরিয়ে আসার কথা বিবেচনা করা হয়।
এছাড়াও, NetworkScore ক্লাস নেটওয়ার্ক এজেন্টকে এটি ঘোষণা করতে দেয় যে Android KEEP_CONNECTED_FOR_HANDOVER ফ্ল্যাগ ও
NetworkScore.Builder.setKeepConnectedReason পদ্ধতি ব্যবহার করে
নেটওয়ার্ক কানেক্ট করে রাখে। এই
KEEP_CONNECTED_FOR_HANDOVER ফ্ল্যাগ সম্ভাব্য নেটওয়ার্ককে সাহায্য করে। এই ফ্ল্যাগটি নেটওয়ার্ক
এজেন্টকে সেকেন্ডারি ওয়াই-ফাই STA-তে নেটওয়ার্ক আনতে দেয়। Android নেটওয়ার্কের পারফর্ম্যান্স মূল্যায়ন না করা পর্যন্ত এটি প্রাইমারি
নেটওয়ার্ক হয় না। কোনও নেটওয়ার্ক এজেন্ট
এই ফ্ল্যাগ ঘোষণা না করলে, এজেন্ট কোনও নেটওয়ার্কের পারফর্ম্যান্স মূল্যায়ন করার আগে Android সম্ভাব্য নেটওয়ার্ককে
কোনও অনুরোধ পূরণ না করার জন্য বন্ধ করে দেয়।
দুটি নেটওয়ার্ক যদি কোনও অনুরোধ পূরণ করতে পারে এবং তাদের নীতি একই হয়, তাহলে Android যে নেটওয়ার্ক অনুরোধ পূরণ করছে তাকেই অগ্রাধিকার দেয়। কোনও নেটওয়ার্ক যদি অনুরোধ পূরণ করতে না পারে, তাহলে Android দুটির মধ্যে একটি বেছে নেয়। নীতি সংক্রান্ত ফ্ল্যাগ পরিবর্তন না হওয়া পর্যন্ত এই নেটওয়ার্ককে অগ্রাধিকার দেওয়া হবে।
Android ওপেন সোর্স প্রোজেক্ট (AOSP)-এর মধ্যে থাকা কানেক্টিভিটি মডিউলে
নেটওয়ার্ক বেছে নেওয়ার ফিচার প্রয়োগ করা হয়। নেটওয়ার্ক বেছে নেওয়ার জন্য নীতি সংক্রান্ত লজিক
NetworkRanker ক্লাস ও এর সহায়ক ক্লাসে আছে। এর অর্থ হল, ডিভাইস
নির্মাতারা সরাসরি নেটওয়ার্ক বেছে নেওয়ার কোড কাস্টমাইজ করতে পারবেন না। পরিবর্তে, নেটওয়ার্ক সম্পর্কে তথ্য জানাতে
তাদের NetworkScore-এ ফ্ল্যাগ ব্যবহার করতে হবে।
Android 11
Android 11 বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসের ক্ষেত্রে, Android নেটওয়ার্ক এজেন্ট (NetworkAgent) থেকে পাঠানো পূর্ণসংখ্যার ভিত্তিতে নেটওয়ার্ক বেছে নেয়। প্রতিটি অনুরোধের জন্য, Android সবচেয়ে বেশি স্কোর থাকা নেটওয়ার্ক বেছে নেয় যা অনুরোধ পূরণ করতে পারে। এই সংখ্যাসূচক স্কোরটি হল নেটওয়ার্ক এজেন্ট পাঠানো পূর্ণসংখ্যা
এবং অতিরিক্ত বোনাস বা পেনাল্টির যোগফল। Android এই বোনাস বা পেনাল্টি শর্তের ভিত্তিতে প্রয়োগ করে, যেমন, নেটওয়ার্কটি যাচাই করা হয়েছে কিনা বা VPN কিনা। নীতি সংক্রান্ত সিদ্ধান্ত নেওয়ার জন্য নেটওয়ার্ক এজেন্টরা একে অপরের সাথে সিঙ্ক্রোনাইজ করে।
দুটি নেটওয়ার্ক যদি কোনও অনুরোধের উত্তর দিতে পারে এবং তাদের স্কোর একই হয়, তাহলে কী হবে তা বলা যায় না।
NetworkScore ক্লাস
নেটওয়ার্ক বেছে নেওয়ার ফিচারের ক্ষেত্রে 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
রেজিস্টার করতে পারেন। আপনি এই পদ্ধতি ব্যবহার করলে, এমন একটি স্কোর
ফিল্টার পাস করুন যা ফ্যাক্টরি তৈরি করতে পারে এমন সেরা স্কোরকে সবচেয়ে সঠিকভাবে উপস্থাপন করে।
এর ফলে ফ্যাক্টরি পূরণ করতে পারবে না এমন অনুরোধ মূল্যায়ন করার প্রয়োজন হয় না বলে ব্যাটারি সাশ্রয় হয়।
যাচাইকরণ
Android-পরিচালিত ডিভাইসে নেটওয়ার্ক বেছে নেওয়ার আচরণ যাচাই করতে, নিম্নলিখিত টেস্ট ব্যবহার করুন:
NetworkScoreTestCTS টেস্টNetworkRankerইউনিট টেস্ট
ভুলভাবে প্রয়োগ করলে, অ্যাপ NetworkCallback ব্যবহার করার সময়
অপ্রত্যাশিত নেটওয়ার্ক অ্যাপে ফিরে আসতে পারে। এর মধ্যে ডিভাইসের ডিফল্ট নেটওয়ার্ক (নেটওয়ার্ক কলব্যাক ব্যবহার করার সময় সিস্টেম কোনও অ্যাপে যে নেটওয়ার্ক পাঠায়, যেমন, ConnectivityManager.registerDefaultNetworkCallback-এর সাথে)
বেছে নেওয়া অন্তর্ভুক্ত।
ভুল প্রয়োগের ফলে ব্যাটারির চার্জ দ্রুত শেষ হয়ে যাওয়ার মতো গুরুতর সমস্যাও হতে পারে। কোনও নেটওয়ার্ক এজেন্টের স্কোর এমন হলে এটি ঘটে যে সেটি কোনও অনুরোধের জন্য উপযুক্ত হয় না এবং সাথে সাথেই সেটি বন্ধ করে দেওয়া হয়। এজেন্ট যদি বারবার কানেক্ট ও ডিসকানেক্ট করে, তাহলে এটি অনেক ব্যাটারি খরচ করতে পারে।