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

توضّح هذه الصفحة كيفية اختيار Android بين الشبكات المتاحة في الوقت نفسه. تؤثر آلية اختيار الشبكة هذه في كيفية استجابة Android لطلبات الشبكة من التطبيقات والنظام، كما تؤثر في كيفية اختيار الشبكة التلقائية للتطبيق.

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

يوضّح هذا القسم سلوك اختيار الشبكة للأجهزة التي تعمل بالإصدار 12 من نظام التشغيل Android أو إصدار أحدث والأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android والإصدارات الأقدم.

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 بدون جعلها الشبكة الأساسية إلى أن يتم تقييم أداء الشبكة. إذا لم يُعلِن موظّف شبكة عن هذا العلامة، تتم إزالة الشبكات المحتملة لعدم تقديم أي طلب قبل أن يحصل الموظف على فرصة لتقييم أداء الشبكة.

إذا كانت هناك شبكتَان يمكنهما عرض طلب معيّن وهما متكافئتان من وجهة نظر السياسة، يفضّل الاختيار الشبكة التي تعرِض حاليًا الطلب. إذا لم تكن أيّ شبكة تعرض الطلب، يتم اختيار إحدى الشبكتين، وبعد ذلك يستمرّ اختيار هذه الشبكة كمفضّلة إلى أن تتغيّر علامات السياسة.

يمكن تنفيذ ميزة اختيار الشبكة في وحدة الاتصال في 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 لوكيل الشبكة لاستخدام فئة NetworkScore. يتم تمرير عدد صحيح قديم مستخدَم في Android 11 أو الإصدارات الأقدم في NetworkScore، ولكن لا يتم استخدامه إلا لأغراض التسجيل وعدم الرجوع إلى إصدار سابق في Android 12. في Android 12، على المصنّعين تحديد التغييرات المطلوبة باستخدام علامات NetworkScore. بعد ذلك، تستخدم وحدة Connectivity Mainline العلامات لاتخاذ قرار اختيار الشبكة. يمكن أن يتوقع مصنعو الأجهزة الذين يستخدمون رمزًا لنظام التشغيل Android 11 أو إصدارًا أقدم، ولكنهم ينشئون الإصدار ليعمل على الإصدار 12 من Android، حدوث أخطاء في عملية الإنشاء لأنّه تمت إزالة طرق تعديل الأعداد الصحيحة القديمة في الإصدار 12 من Android.

بالنسبة إلى وكلاء الشبكة الذين يستخدمون فئة NetworkFactory الداخلية، عليهم التعبير عن فلتر النتيجة في عنصر NetworkScore الذي يمثّل أعلى نتيجة لشبكة يمكن للمصنع إنشاؤها. ويعود سبب ذلك إلى أنّ فئة NetworkFactory في Android 12 تُمرِّر فقط الطلبات التي تتطابق مع فلاتر النقاط التي تمّ الإبلاغ عنها NetworkFactory بدلاً من جميع الطلبات في Android 11 والإصدارات الأقدم.

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

التحقُّق

للتحقّق من سلوك اختيار الشبكة على جهاز Android، استخدِم الاختبارين التاليين:

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

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