اختيار الشبكة

توضّح هذه الصفحة كيفية اختيار 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، يمكنك استخدام الاختبارات التالية:

قد يؤدي التنفيذ غير الصحيح إلى إرجاع شبكات غير متوقعة إلى التطبيقات استجابةً لاستخدامهم NetworkCallback, بما في ذلك تحديد الشبكة الافتراضية للجهاز (الشبكة التي يستخدمها النظام إلى التطبيق عند استخدام رد اتصال الشبكة مع ConnectivityManager.registerDefaultNetworkCallback).

هناك مشكلة أخرى محتملة مع التنفيذ غير الصحيح وهي استنزاف البطارية بشكل كبير ينتج عن طرح وكيل الشبكة بنتيجة لا تسمح مؤهلاً لأي طلب وتتم إزالتها فورًا. إذا تم إظهار الوكيل وإزالته بشكل متكرّر، قد يؤدي ذلك إلى استهلاك الكثير من طاقة البطارية.