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

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

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

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

Android 12

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

يستخدم وكيل الشبكة (NetworkAgent) العلامة POLICY_TRANSPORT_PRIMARY لتحديد أنّ Android يفضّل الشبكة إذا كانت هناك شبكات متعددة من نوع النقل نفسه. على سبيل المثال، يحتوي جهاز شريحتَي SIM على مفتاح في الإعدادات يتيح لك اختيار شريحة SIM التي تريد استخدامها تلقائيًا. ضمن نوع نقل معيّن، يفضّل Android شبكة تتضمّن العلامة POLICY_TRANSPORT_PRIMARY على شبكة لا تتضمّن هذه العلامة.

يستخدم وكيل الشبكة العلامة POLICY_EXITING لتحديد شبكة من المتوقّع أن يتم قطع اتصالها. على سبيل المثال، تنخفض جودة شبكة Wi-Fi إذا خرج المستخدم من نطاق الشبكة. يتجنّب Android استخدام شبكة تتضمّن هذه العلامة إذا كانت هناك شبكة أخرى لا تتضمّنها. يمكن لكل وكيل شبكة تحديد متى تنخفض جودة الشبكة بما يكفي لاعتبارها خارجة عن النطاق.

تتيح فئة NetworkScore أيضًا لوكيل الشبكة الإعلان عن أنّ Android يحافظ على اتصال الشبكة باستخدام العلامة KEEP_CONNECTED_FOR_HANDOVER والطريقة NetworkScore.Builder.setKeepConnectedReason. تساعد العلامة KEEP_CONNECTED_FOR_HANDOVER الشبكات المحتملة. تتيح هذه العلامة لوكيل الشبكة إعداد شبكة على محطة Wi-Fi ثانوية بدون جعلها الشبكة الأساسية إلى أن يقيّم Android أداء الشبكة. إذا لم يعلن وكيل الشبكة عن هذه العلامة، يوقف Android الشبكات المحتملة لعدم معالجة أي طلب قبل أن يقيّم الوكيل أداء الشبكة.

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

تم تنفيذ ميزة اختيار الشبكة في وحدة Connectivity في "المشروع المفتوح المصدر لنظام Android" ‏ (AOSP). توجد منطق السياسة لاختيار الشبكة في فئة NetworkRanker والفئات المساعدة لها. يعني ذلك أنّه لا يمكن لمصنّعي الأجهزة تخصيص رمز اختيار الشبكة مباشرةً. بدلاً من ذلك، عليهم استخدام العلامات في NetworkScore لنقل معلومات عن الشبكات.

Android 11

بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم، ينفّذ Android عملية اختيار الشبكة استنادًا إلى عدد صحيح يتم إرساله من وكيل شبكة (NetworkAgent). يختار Android لكل طلب الشبكة التي تحقّق أعلى نتيجة رقمية ويمكنها استيفاء الطلب. تتكوّن هذه النتيجة الرقمية من العدد الصحيح الذي يرسله وكيل الشبكة بالإضافة إلى المكافآت أو العقوبات الإضافية. يطبّق Android هذه المكافآت أو العقوبات استنادًا إلى شروط معيّنة، مثلاً، ما إذا تم التحقّق من صحة الشبكة أو ما إذا كانت شبكة VPN. تتزامن وكلاء الشبكة مع بعضهم البعض لاتخاذ قرارات السياسة.

إذا كان بإمكان شبكتَين معالجة طلب معيّن وكانتا تحقّقان النتيجة الرقمية نفسها، يكون السلوك غير محدّد.

فئة NetworkScore

تُعد فئة NetworkScore أساسية لميزة اختيار الشبكة. تحتوي هذه الفئة على واجهة برمجة التطبيقات والوثائق للعلامات المتاحة والطريقة NetworkScore.Builder.setKeepConnectedReason.

عليك إنشاء فئة NetworkScore باستخدام فئة الإنشاء الخاصة بها وتمريرها إلى الدالة الإنشائية NetworkAgent أثناء التهيئة. يمكنك تعديل نتائج الشبكة في أي وقت باستخدام NetworkAgent#sendNetworkScore الطريقة.

أمثلة على تنفيذ وكيل الشبكة

يتضمّن AOSP أمثلة على عمليات تنفيذ مختلف وكلاء الشبكة. تقدّم القائمة التالية أمثلة على عمليات التنفيذ:

  • TelephonyNetworkAgent: تستخدم نتيجة الشبكة لنقل السياسة الخاصة بشبكات الجوّال.
  • ClientModeImpl.WifiNetworkAgent: تستخدم نتيجة الشبكة لنقل السياسة الخاصة بشبكات Wi-Fi. يوفر هذا التنفيذ توافقًا مع الإصدارات القديمة للعدد الصحيح الخاص بنتيجة الشبكة باستخدام العلامة POLICY_EXITING.

الأجهزة التي يتم ترقيتها إلى Android 12

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

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

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

التحقق من صحة البيانات

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

  • اختبار NetworkScoreTest في مجموعة اختبارات التوافق (CTS)
  • اختبار الوحدة NetworkRanker

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

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