توضّح هذه الصفحة كيف يختار نظام التشغيل 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 إحدى الشبكتين. وستبقى هذه الشبكة هي المفضّلة إلى أن تتغير علامات السياسة.
يتم تنفيذ ميزة اختيار الشبكة في وحدة الاتصال ضمن "مشروع 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
على الشركات المصنّعة للأجهزة التي تعمل على ترقية أجهزتها إلى الإصدار 12 من نظام التشغيل Android تعديل عمليات تنفيذ وكيل الشبكة لاستخدام الفئة NetworkScore
. يتم تمرير عدد صحيح قديم مستخدَم في الإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم في NetworkScore
، ولكن يتم استخدامه فقط لأغراض التسجيل وعدم التراجع في الإصدار 12 من نظام التشغيل Android. في نظام التشغيل Android 12، على الشركات المصنّعة للأجهزة التعبير عن التغييرات باستخدام علامات NetworkScore
. بعد ذلك، تستخدم وحدة Connectivity Mainline العلامات لاتخاذ قرارات بشأن اختيار الشبكة. إذا كان مصنّعو الأجهزة يستخدمون رمزًا برمجيًا للإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم، ولكنهم يجرون عمليات إنشاء تستند إلى التنفيذ في الإصدار 12 من نظام التشغيل Android، من المتوقّع أن تحدث أخطاء في الإنشاء لأنّه تمت إزالة طرق تعديل العدد الصحيح القديم في الإصدار 12 من نظام التشغيل Android.
بالنسبة إلى وكلاء الشبكة الذين يستخدمون الفئة الداخلية NetworkFactory
، عليك التعبير عن فلتر النتائج في كائن NetworkScore
يمثّل أعلى نتيجة يمكن للمصنع إنشاؤها. ويرجع ذلك إلى أنّ الفئة NetworkFactory
في الإصدار 12 من نظام التشغيل Android لا تمرّر سوى الطلبات التي تتطابق مع فلاتر النتائج المُحدّدة في NetworkFactory
، على عكس الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم التي تمرّر جميع الطلبات.
يمكنك تمرير فلتر لتبسيط عملية التنفيذ وتوفير البطارية، ما يضمن عدم معالجة NetworkFactory
لجميع الطلبات. ومع ذلك، إذا كان التنفيذ المخصّص يتطلّب تمرير جميع الطلبات إلى NetworkFactory
، يمكنك تسجيل NetworkFactory.registerIgnoringScore
بدلاً من الطريقة العادية NetworkFactory.register
. في حال استخدام هذه الطريقة، عليك تمرير فلتر
للتسجيل يمثّل بدقة أكبر أفضل نتيجة يمكن أن يحقّقها المصنع.
يساعد ذلك في الحفاظ على عمر البطارية من خلال منع تقييم الطلبات التي لا يمكن للمصنع تنفيذها.
التحقُّق
للتحقّق من سلوك اختيار الشبكة على جهاز يعمل بنظام التشغيل Android، استخدِم الاختبارات التالية:
NetworkScoreTest
اختبار CTSNetworkRanker
اختبار وحدة
قد يؤدي التنفيذ غير الصحيح إلى عودة الشبكات غير المتوقّعة إلى التطبيقات
عند استخدامها NetworkCallback
. ويشمل ذلك اختيار الشبكة التلقائية للجهاز (الشبكة التي يرسلها النظام إلى أحد التطبيقات عندما يستخدم رد اتصال الشبكة، مثلاً باستخدام ConnectivityManager.registerDefaultNetworkCallback
).
هناك مشكلة أخرى محتملة في التنفيذ غير الصحيح وهي استنزاف البطارية بشكل كبير. يحدث ذلك عندما يتم عرض وكيل شبكة بنتيجة لا تؤهّله لتلبية أي طلب، ويتم إيقافه فورًا بعد ذلك. إذا كان الوكيل يعرض ويغلق بشكل متكرر، قد يؤدي ذلك إلى استهلاك كبير للبطارية.