توضّح هذه الصفحة كيفية اختيار Android بين الشبكات المتاحة في الوقت نفسه. تؤثر آلية اختيار الشبكة هذه في كيفية تنفيذ Android للتطبيق والنظام. طلبات الشبكة، كما يؤثر في كيفية اختيار الشبكة الافتراضية لأحد التطبيقات.
سلوك اختيار الشبكة
يصف هذا القسم سلوك اختيار الشبكة للأجهزة التي تعمل. الإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث وللأجهزة التي تعمل بنظام التشغيل Android 11 وأقل.
Android 12
بالنسبة إلى الأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو إصدار أحدث، يستخدم Android
الفئة
NetworkScore
لاختيار بين الشبكات المتاحة. تحتوي هذه الفئة على عدد من
العلامات المطلوبة لاتخاذ قرارات بشأن السياسات. يمثل كل علم دلاليًا
لأي شبكة مهمة لاختيار الشبكة.
وكيل الشبكة
(NetworkAgent
)
تستخدم
POLICY_TRANSPORT_PRIMARY
لتحديد أن الشبكة مفضلة عند استخدام عدة شبكات من نفس
النقل موجودة. ومن الأمثلة الشائعة على ذلك جهاز بشريحتَي SIM مزوّد بأحد
المفتاحَين في "الإعدادات" للسماح للمستخدم باختيار شريحة SIM التي سيتم استخدامها
تلقائيًا. ضمن طريقة نقل معيّنة، يفضّل 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
لنقل المعلومات المطلوبة حول الشبكات.
Android 11
بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من Android أو الإصدارات الأقدم، يختار Android الشبكة
استنادًا إلى عدد صحيح بسيط يتم إرساله من عمليات تنفيذ وكيل الشبكة
(NetworkAgent
).
يختار Android الشبكة التي تحقّق أعلى نتيجة رقمية
يمكنها تلبية الطلب لكل طلب. تتألف هذه النتيجة الرقمية من العدد الصحيح المُرسَل
بواسطة وكيل الشبكة بالإضافة إلى مكافآت أو عقوبات إضافية يتم تقديمها استنادًا إلى
عدد الشروط مثل ما إذا كان قد تم التحقق من صحة الشبكة أو ما إذا كان
عبارة عن شبكة VPN. ينسِّق وكلاء الشبكة الفرديون مع بعضهم البعض لاتخاذ قرارات متعلقة بالسياسة.
إذا استطاعت شبكتان تقديم طلب معين وكان لهما نفس النتيجة الرقمية، غير محدد.
فئة NetworkScore
الفئة المركزية لميزة اختيار الشبكة هي
NetworkScore
تحتوي هذه الفئة على واجهة برمجة التطبيقات والمستندات المتعلّقة بالعلامات المتاحة وsetKeepConnectedReason
الطريقة.
يجب إنشاء فئة NetworkScore
من خلال فئة المُنشئ وتمريرها
إلى
دالة الإنشاءNetworkAgent
عند الإعداد. يمكن تعديل نتائج الشبكة في أي وقت باستخدام NetworkAgent#sendNetworkScore
الطريقة.
أمثلة على تنفيذ وكيل الشبكة
يتضمن AOSP أمثلة على عمليات تنفيذ لوكلاء الشبكة المختلفين. في ما يلي أمثلة على عمليات التنفيذ:
TelephonyNetworkAgent
: استخدام نتيجة الشبكة لعرض سياسة شبكات الجوّال-
ClientModeImpl.WifiNetworkAgent
: يستخدم هذا الخيار نتيجة شبكة Wi-Fi لإعلام المستخدمين بالسياسة المتّبعة في ما يتعلّق بشبكات Wi-Fi. هذا النمط تنفيذ يتضمن التوافق مع الأنظمة القديمة مع العدد الصحيح القديم نتيجة الشبكة باستخدام العلامةPOLICY_EXITING
.
الأجهزة التي ستتم ترقيتها إلى Android 12
تعمل الشركات المصنّعة للأجهزة على ترقية أجهزتهم إلى
على Android 12 تعديل وكيل الشبكة
عمليات التنفيذ لاستخدام الفئة NetworkScore
. يتم تمرير عدد صحيح قديم مستخدَم في
Android 11 أو الإصدارات الأقدم في NetworkScore
، ولكن لا يتم استخدامه إلا
لأغراض التسجيل وعدم الرجوع إلى إصدار سابق في Android 12.
في Android 12، على المصنّعين تحديد
التغييرات المطلوبة باستخدام علامات NetworkScore
. بعد ذلك، تستخدم وحدة Connectivity Mainline
العلامات لاتخاذ قرار اختيار الشبكة. يمكن أن يتوقع مصنعو الأجهزة
الذين يستخدمون رمزًا لنظام التشغيل Android 11 أو إصدارًا أقدم، ولكنهم ينشئون الإصدار ليعمل على
الإصدار 12 من Android، حدوث أخطاء في عملية الإنشاء
لأنّه تمت إزالة طرق تعديل الأعداد الصحيحة القديمة في
الإصدار 12 من Android.
بالنسبة إلى وكلاء الشبكة الذين يستخدمون عناوين URL
NetworkFactory
الفئة، يجب التعبير عن فلتر النتائج في عنصر NetworkScore
.
تمثل أقوى نتيجة للشبكة التي يمكن للمصنع إنشاؤها. هذا هو
لأنه في نظام Android 12، لا يتم تضمين سوى فئة NetworkFactory
فقط
تمرير الطلبات التي تتطابق مع فلاتر النتائج المعلَنة مع NetworkFactory
بدلاً من كل الطلبات في نظام التشغيل Android 11 والإصدارات الأقدم
ننصحك باجتياز أحد الفلاتر لتسهيل عملية التنفيذ وتوفير طاقة البطارية كي
أنّه لا يتم تمرير جميع الطلبات إلى NetworkFactory
. ومع ذلك، إذا كان التخصيص
التنفيذ يتطلب تمرير جميع الطلبات إلى NetworkFactory
، يمكنك
سجلّ
NetworkFactory.registerIgnoringScore
بدلاً من التنسيق العادي
NetworkFactory.register
. في حال استخدام هذه الطريقة، ننصحك بتمرير فلتر للنقاط يمثّل بدقة أكبر أفضل نتيجة يمكن للمصنع تحقيقها من أجل توفير البطارية من خلال عدم تقييم الطلبات التي لا يمكن للمصنع تلبيتها.
التحقُّق
للتحقق من سلوك اختيار الشبكة على جهاز Android، يمكنك استخدام الاختبارات التالية:
NetworkScoreTest
اختبار CTSNetworkRanker
اختبار الوحدة
قد يؤدي التنفيذ غير الصحيح إلى إرجاع شبكات غير متوقعة إلى
التطبيقات استجابةً لاستخدامهم
NetworkCallback
,
بما في ذلك تحديد الشبكة الافتراضية للجهاز (الشبكة التي يستخدمها النظام
إلى التطبيق عند استخدام رد اتصال الشبكة مع
ConnectivityManager.registerDefaultNetworkCallback
).
هناك مشكلة أخرى محتملة مع التنفيذ غير الصحيح وهي استنزاف البطارية بشكل كبير ينتج عن طرح وكيل الشبكة بنتيجة لا تسمح مؤهلاً لأي طلب وتتم إزالتها فورًا. إذا تم إظهار الوكيل وإزالته بشكل متكرّر، قد يؤدي ذلك إلى استهلاك الكثير من طاقة البطارية.