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

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

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

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

أندرويد 12

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

يستخدم وكيل الشبكة ( NetworkAgent ) علامة POLICY_TRANSPORT_PRIMARY لتحديد تفضيل الشبكة عند وجود شبكات متعددة لنفس النقل. ومن الأمثلة النموذجية على ذلك جهاز ثنائي شرائح الاتصال مزود بمفتاح في الإعدادات للسماح للمستخدم باختيار أي من بطاقات 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 لنقل المعلومات المطلوبة حول الشبكات.

أندرويد 11

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

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

فئة NetworkScore

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

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

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

تصديق

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

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

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