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

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

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

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

التحقُّق

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

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

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