בחירת רשת

דף זה מתאר כיצד אנדרואיד בוחר בין רשתות זמינות בו-זמנית. מנגנון בחירת רשת זה משפיע על האופן שבו אנדרואיד ממלא בקשות לרשת של אפליקציות ומערכת, ומשפיע על אופן בחירת רשת ברירת המחדל עבור אפליקציה.

התנהגות בחירת רשת

סעיף זה מתאר את התנהגות בחירת הרשת עבור מכשירים עם אנדרואיד 12 ומעלה ועבור מכשירים עם אנדרואיד 11 ומטה.

אנדרואיד 12

עבור מכשירים עם אנדרואיד 12 ומעלה, אנדרואיד משתמשת במחלקת NetworkScore כדי לבחור בין רשתות זמינות. מחלקה זו מכילה מספר דגלים הנדרשים לקבלת החלטות מדיניות. כל דגל מייצג מבחינה סמנטית תכונה של רשת שחשובה לבחירת הרשת.

סוכן רשת ( NetworkAgent ) משתמש בדגל POLICY_TRANSPORT_PRIMARY כדי לציין שהרשת מועדפת כאשר קיימות מספר רשתות מאותה תחבורה. דוגמה טיפוסית לכך היא מכשיר SIM כפול עם מתג בהגדרות כדי לאפשר למשתמש לבחור באיזה מכרטיסי ה-SIM להשתמש כברירת מחדל. בתוך תחבורה נתונה, אנדרואיד מעדיף רשת עם הדגל POLICY_TRANSPORT_PRIMARY על פני רשת ללא הדגל.

סוכן רשת משתמש בדגל POLICY_EXITING כדי לזהות רשת שצפויה להתנתק בקרוב. דוגמה טיפוסית לכך היא כאשר איכות רשת ה-Wi-Fi יורדת כאשר משתמש יוצא מטווח הרשת. אנדרואיד נמנע משימוש ברשת עם דגל זה אם רשת אחרת ללא דגל זה זמינה. כל סוכן רשת בודד יכול לקבוע מתי רשת מתדרדרת מספיק כדי להיחשב כיציאה.

המחלקה NetworkScore גם מאפשרת לסוכן רשת להכריז שרשת תוחזק באמצעות הדגל KEEP_CONNECTED_FOR_HANDOVER ובשיטת NetworkScore.Builder.setKeepConnectedReason . דגל KEEP_CONNECTED_FOR_HANDOVER זה שימושי עבור רשתות פוטנציאליות המאפשר לסוכן רשת להעלות רשת ב- Wi-Fi STA משני מבלי להפוך אותה לרשת הראשית עד להערכת ביצועי הרשת. אם סוכן רשת לא מצהיר על הדגל הזה, רשתות פוטנציאליות נקרעות בגלל שלא נותנות שירות לכל בקשה לפני שלסוכן יש הזדמנות להעריך את ביצועי הרשת.

אם שתי רשתות יכולות לשרת בקשה נתונה והן שוות ערך מנקודת מבט של מדיניות, הבחירה מעדיפה את הרשת שמשרתת כעת את הבקשה. אם אף רשת לא משרתת את הבקשה, היא בוחרת באחת מהשתיים, ולאחר מכן רשת זו ממשיכה להיות מועדפת עד לשינוי דגלי המדיניות.

היישום של תכונת בחירת הרשת הוא במודול הקישוריות ב-AOSP. היגיון המדיניות לבחירת רשת נמצא במחלקה NetworkRanker ובמחלקות העזר שלה. משמעות הדבר היא שיצרני המכשירים אינם יכולים להתאים אישית את קוד בחירת הרשת, אלא חייבים להשתמש בדגלים ב- NetworkScore כדי להעביר מידע נדרש על רשתות.

אנדרואיד 11

עבור מכשירים עם אנדרואיד 11 ומטה, אנדרואיד מבצעת בחירת רשת על סמך מספר שלם פשוט שנשלח מהטמעות של סוכן רשת ( NetworkAgent ). עבור כל בקשה, אנדרואיד בוחרת את הרשת עם הציון המספרי הגבוה ביותר שיכול לספק את הבקשה. ציון מספרי זה מורכב מהמספר השלם שנשלח על ידי סוכן הרשת בתוספת בונוסים או קנסות נוספים שניתנו על סמך מספר תנאים כגון האם הרשת מאומתת או האם הרשת היא VPN. סוכני רשת בודדים מסתנכרנים זה עם זה על מנת לקבל החלטות מדיניות.

אם שתי רשתות יכולות לשרת בקשה נתונה ובעלות ציון מספרי זהה, ההתנהגות אינה מוגדרת.

שיעור NetworkScore

המחלקה המרכזית לתכונת בחירת הרשת היא NetworkScore . מחלקה זו מכילה את ה-API ותיעוד של הדגלים הזמינים ואת שיטת setKeepConnectedReason .

יש לבנות את המחלקה NetworkScore דרך מחלקת ה-Builder שלה ולהעביר אותה לבנאי NetworkAgent עם האתחול. ניתן לעדכן את ציוני הרשת בכל עת באמצעות שיטת NetworkAgent#sendNetworkScore .

דוגמאות ליישום סוכני רשת

AOSP כולל יישומים לדוגמה של סוכני רשת שונים. להלן יישומים לדוגמה:

  • TelephonyNetworkAgent : משתמש בציון הרשת כדי להעביר מדיניות עבור רשתות סלולריות
  • ClientModeImpl.WifiNetworkAgent : משתמש בציון הרשת כדי להעביר מדיניות עבור רשתות Wi-Fi. יישום זה כולל תאימות לאחור עם המספר השלם מדור קודם עבור ציון הרשת באמצעות הדגל POLICY_EXITING .

מכשירים המשדרגים לאנדרואיד 12

יצרני מכשירים שמשדרגים את המכשירים שלהם לאנדרואיד 12 חייבים לשנות את יישומי סוכן הרשת שלהם כדי להשתמש במחלקת NetworkScore . המספר השלם הישן המשמש ב-Android 11 ומטה מועבר ב- NetworkScore , אך הוא משמש רק למטרות רישום וללא רגרסיה ב-Android 12. ב-Android 12, יצרני המכשירים חייבים להביע את השינויים הרצויים באמצעות דגלי NetworkScore . לאחר מכן, מודול Connectivity Mainline משתמש בדגלים כדי לקבל את החלטת בחירת הרשת. יצרני מכשירים המשתמשים בקוד עבור אנדרואיד 11 ומטה אך בונים נגד היישום ב-Android 12 יכולים לצפות לשגיאות בנייה מכיוון שהשיטות לעדכון המספר השלם מדור קודם הוסרו באנדרואיד 12.

עבור סוכני רשת שמשתמשים במחלקה הפנימית NetworkFactory , עליהם לבטא את מסנן הניקוד שלהם באובייקט NetworkScore המייצג את הניקוד החזק ביותר של רשת שהמפעל יכול ליצור. הסיבה לכך היא שב-Android 12 הכיתה NetworkFactory מעבירה רק בקשות התואמות את מסנני הניקוד שהוכרזו ל- NetworkFactory במקום את כל הבקשות באנדרואיד 11 ומטה.

אנו ממליצים להעביר מסנן ליישום קל יותר וחיסכון בסוללה, כך שלא כל הבקשות יעברו ל- NetworkFactory . עם זאת, אם ההטמעה המותאמת אישית שלך דורשת שכל הבקשות יעברו ל- NetworkFactory , תוכל לרשום את NetworkFactory.registerIgnoringScore במקום השיטה הרגילה NetworkFactory.register . אם משתמשים בשיטה זו, אנו ממליצים להעביר מסנן ניקוד המייצג בצורה המדויקת ביותר את הציון הטוב ביותר שהמפעל יכול ליצור על מנת לחסוך בסוללה על ידי אי הערכת בקשות שהמפעל לא יכול למלא.

מַתַן תוֹקֵף

כדי לאמת את התנהגות בחירת הרשת במכשיר אנדרואיד, השתמש בבדיקות הבאות:

יישום שגוי עלול לגרום להחזרת רשתות בלתי צפויות לאפליקציות בתגובה לשימוש שלהן ב- NetworkCallback , כולל בחירת רשת ברירת המחדל של המכשיר (הרשת שהמערכת שולחת לאפליקציה כשהן משתמשות בהתקשרות חוזרת לרשת עם ConnectivityManager.registerDefaultNetworkCallback ).

בעיה אפשרית נוספת ביישום שגוי היא ריקון סוללה חמור שנגרם על ידי סוכן רשת שהועלה עם ניקוד שלא נותן לו להעפיל לכל בקשה ונקרע מיד לאחר מכן. אם מעלים את הסוכן ופורקים אותו שוב ושוב, הדבר עלול לצרוך הרבה סוללה.