การเลือกเครือข่าย

หน้านี้จะอธิบายวิธีที่ Android เลือกระหว่างเครือข่ายที่ใช้ได้พร้อมกัน กลไกการเลือกเครือข่ายนี้ส่งผลต่อวิธีที่ Android ตอบสนองคำขอเครือข่ายของแอปและระบบ รวมถึงส่งผลต่อวิธีเลือกเครือข่ายเริ่มต้นสำหรับแอป

ลักษณะการทำงานของการเลือกเครือข่าย

ส่วนนี้จะอธิบายลักษณะการเลือกเครือข่ายสำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไปและสำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า

Android 12

สำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป Android จะใช้ เวลา NetworkScore ประเภทเพื่อเลือกระหว่างเครือข่ายที่ใช้ได้ คลาสนี้ประกอบด้วย ที่จำเป็นต่อการตัดสินใจด้านนโยบาย แต่ละธงสื่อถึง ของเครือข่ายที่มีความสำคัญต่อการเลือกเครือข่าย

ตัวแทนเครือข่าย (NetworkAgent) ใช้ Flag POLICY_TRANSPORT_PRIMARY เพื่อระบุว่าเครือข่ายเป็นเครือข่ายที่ต้องการเมื่อมีเครือข่ายหลายเครือข่ายที่ใช้การขนส่งเดียวกัน ตัวอย่างโดยทั่วไปของกรณีนี้คือ อุปกรณ์แบบ 2 ซิม เปลี่ยนในการตั้งค่าเพื่อให้ผู้ใช้เลือกซิมการ์ดที่จะใช้ได้ "ค่าเริ่มต้น" ในการรับส่งข้อมูลหนึ่งๆ Android ต้องการเครือข่ายที่มี POLICY_TRANSPORT_PRIMARY การตั้งค่าสถานะผ่านเครือข่ายโดยไม่มีธง

ตัวแทนเครือข่ายใช้ Flag POLICY_EXITING เพื่อระบุเครือข่ายที่คาดว่าจะตัดการเชื่อมต่อในไม่ช้า เมตริกทั่วไป ตัวอย่างของกรณีนี้คือเมื่อคุณภาพเครือข่าย Wi-Fi ลดลงในขณะที่ผู้ใช้เดินออกจาก ของเครือข่าย Android หลีกเลี่ยงการใช้เครือข่ายที่มี Flag นี้หากมีอีก เครือข่ายที่ไม่มี Flag นี้ใช้งานได้ Agent เครือข่ายแต่ละรายสามารถระบุได้ว่าเครือข่ายมีประสิทธิภาพลดลงมากพอที่จะถือว่าออกหรือไม่

นอกจากนี้ คลาส NetworkScore ยังอนุญาตให้ตัวแทนเครือข่ายประกาศว่าเครือข่ายจะยังคงทำงานต่อไปโดยใช้ Flag KEEP_CONNECTED_FOR_HANDOVER และเมธอด NetworkScore.Builder.setKeepConnectedReason ช่วงเวลานี้ KEEP_CONNECTED_FOR_HANDOVER ธงมีประโยชน์สำหรับเครือข่ายในอนาคต ซึ่งช่วยให้ตัวแทนเครือข่ายแสดง เครือข่าย Wi-Fi STA สำรองโดยไม่ทำให้เครือข่ายนั้นเป็นเครือข่ายหลักจนกว่า ระบบจะประเมินประสิทธิภาพเครือข่าย หากตัวแทนเครือข่ายไม่ได้ประกาศ Flag นี้ ระบบจะยกเลิกเครือข่ายที่คาดหวังเนื่องจากไม่ให้บริการคำขอใดๆ ก่อนที่ตัวแทนจะมีโอกาสประเมินประสิทธิภาพของเครือข่าย

หากเครือข่าย 2 เครือข่ายสามารถตอบสนองคำขอหนึ่งๆ ได้และเทียบเท่ากันจากจุดของนโยบาย ที่เลือกต้องการเครือข่ายที่กำลังให้บริการ อีกครั้ง หากไม่มีเครือข่ายใดแสดงคำขอ ระบบจะเลือกเครือข่ายใดเครือข่ายหนึ่ง หลังจากนั้นระบบจะเลือกเครือข่ายนี้ต่อไปจนกว่าจะมีการแจ้งว่าไม่เหมาะสมตามนโยบาย

การใช้งานฟีเจอร์การเลือกเครือข่ายอยู่ใน โมดูลการเชื่อมต่อ ใน AOSP ตรรกะนโยบายสําหรับการเลือกเครือข่ายอยู่ในคลาส NetworkRanker และคลาสตัวช่วยของคลาสนั้น ซึ่งหมายความว่าผู้ผลิตอุปกรณ์จะปรับแต่งโค้ดการเลือกเครือข่ายโดยตรงไม่ได้ แต่จะต้องใช้ Flag ใน NetworkScore เพื่อสื่อข้อมูลที่จําเป็นเกี่ยวกับเครือข่ายแทน

Android 11

สำหรับอุปกรณ์ที่ใช้ Android 11 หรือต่ำกว่า Android จะเลือกเครือข่าย ขึ้นอยู่กับจำนวนเต็มง่ายๆ ที่ส่งจากการใช้งาน Agent เครือข่าย (NetworkAgent) สําหรับคําขอแต่ละรายการ Android จะเลือกเครือข่ายที่มีคะแนนตัวเลขสูงสุด ซึ่งตอบสนองคำขอได้ คะแนนตัวเลขนี้ประกอบด้วยจำนวนเต็มที่ส่ง โดยตัวแทนเครือข่าย พร้อมด้วยโบนัสหรือการลงโทษเพิ่มเติมตาม จำนวนเงื่อนไข เช่น เครือข่ายมีการตรวจสอบความถูกต้อง หรือ คือ VPN Agent เครือข่ายแต่ละตัวแทนจะซิงค์ข้อมูลกันตามลำดับ ในการตัดสินใจด้านนโยบาย

หากเครือข่าย 2 เครือข่ายแสดงคําขอหนึ่งๆ ได้และมีคะแนนตัวเลขเท่ากัน ระบบจะไม่ระบุลักษณะการทํางาน

คลาส NetworkScore

คลาสส่วนกลางสำหรับฟีเจอร์การเลือกเครือข่ายคือ NetworkScore คลาสนี้ประกอบด้วย API และเอกสารประกอบของ Flag ที่มีและ setKeepConnectedReason

คลาส NetworkScore ต้องสร้างขึ้นผ่านคลาสเครื่องมือสร้างของคลาสและมีการส่งผ่าน ไปยัง เครื่องมือสร้าง NetworkAgent เมื่อมีการเริ่มต้น คุณสามารถอัปเดตคะแนนเครือข่ายได้ทุกเมื่อโดยใช้ NetworkAgent#sendNetworkScore

ตัวอย่างการใช้งาน Agent เครือข่าย

AOSP มีตัวอย่างการใช้งาน Agent เครือข่ายต่างๆ ดังต่อไปนี้ ตัวอย่างการติดตั้งใช้งาน ได้แก่

  • TelephonyNetworkAgent: ใช้คะแนนเครือข่ายเพื่อสื่อสารนโยบายสําหรับเครือข่ายมือถือ
  • ClientModeImpl.WifiNetworkAgent: ใช้คะแนนเครือข่ายเพื่อสื่อสารนโยบายสำหรับเครือข่าย Wi-Fi ช่วงเวลานี้ ซึ่งรวมถึงความเข้ากันได้แบบย้อนหลังกับจำนวนเต็มเดิมสำหรับ คะแนนเครือข่ายโดยใช้ธง POLICY_EXITING

อุปกรณ์ที่อัปเกรดเป็น Android 12

ผู้ผลิตอุปกรณ์กำลังอัปเกรดอุปกรณ์เป็น Android 12 ต้องแก้ไข Agent เครือข่าย การนำไปใช้งานคลาส NetworkScore ระบบจะส่งจำนวนเต็มเดิมที่ใช้ใน Android 11 หรือต่ำกว่าใน NetworkScore แต่จะใช้เพื่อบันทึกและวัตถุประสงค์ที่ไม่ทำให้เกิดข้อบกพร่องซ้ำใน Android 12 เท่านั้น ใน Android 12 ผู้ผลิตอุปกรณ์ต้องระบุการเปลี่ยนแปลงที่ต้องการโดยใช้ Flag NetworkScore จากนั้นโมดูล Mainline ของการเชื่อมต่อจะใช้ Flag ดังกล่าวในการตัดสินใจเลือกเครือข่าย อุปกรณ์ ที่ใช้โค้ดสำหรับ Android 11 หรือต่ำกว่า แต่สร้างตาม การใช้งานใน Android 12 อาจมีข้อผิดพลาดในการสร้าง เนื่องจากวิธีอัปเดตจำนวนเต็มเดิมถูกนำออกใน Android 12

สำหรับ Agent เครือข่ายที่ใช้อินเตอร์เน็ตภายใน NetworkFactory จะต้องแสดงตัวกรองคะแนนในออบเจ็กต์ NetworkScore ซึ่งแสดงคะแนนสูงสุดของเครือข่ายที่โรงงานสร้างขึ้นได้ เนื่องจากใน Android 12 คลาส NetworkFactory จะส่งต่อเฉพาะคำขอที่ตรงกับตัวกรองคะแนนที่ประกาศไปยัง NetworkFactory แทนที่จะส่งต่อคำขอทั้งหมดใน Android 11 และต่ำกว่า

เราขอแนะนำให้ส่งตัวกรองเพื่อให้ใช้งานได้ง่ายขึ้นและประหยัดแบตเตอรี่ โดยส่งเฉพาะคำขอบางรายการไปยัง NetworkFactory อย่างไรก็ตาม หากการติดตั้งใช้งานที่กําหนดเองกําหนดให้ส่งคําขอทั้งหมดไปยัง NetworkFactory คุณสามารถลงทะเบียน NetworkFactory.registerIgnoringScore แทนเมธอด NetworkFactory.register ปกติ หากใช้วิธีการนี้ เราขอแนะนำให้ส่งตัวกรองคะแนนที่แสดงคะแนนที่ดีที่สุดที่โรงงานสร้างได้เพื่อประหยัดแบตเตอรี่โดยไม่ประเมินคำขอที่โรงงานไม่สามารถดำเนินการได้

การตรวจสอบความถูกต้อง

หากต้องการยืนยันลักษณะการเลือกเครือข่ายในอุปกรณ์ Android ให้ใช้ การทดสอบต่อไปนี้:

การใช้งานที่ไม่ถูกต้องอาจส่งผลให้ระบบส่งคืนเครือข่ายที่ไม่คาดคิดไปยัง แอปเพื่อตอบสนองต่อการใช้งาน NetworkCallback, รวมถึงการเลือกเครือข่ายเริ่มต้นของอุปกรณ์ (เครือข่ายที่ระบบ ส่งไปยังแอปเมื่อใช้ Callback ของเครือข่ายที่มี ConnectivityManager.registerDefaultNetworkCallback)

อีกปัญหาหนึ่งที่อาจเกิดขึ้นได้เมื่อมีการติดตั้งใช้งานที่ไม่ถูกต้องคือ แบตเตอรี่หมดเร็ว เกิดจากตัวแทนเครือข่ายถูกถามด้วยคะแนนที่บอกว่า มีสิทธิ์สำหรับคำขอใดๆ และถูกตัดสิทธิ์ทันทีหลังจากนั้น หากเปิดและปิดตัวแทนหลายครั้ง แบตเตอรี่อาจหมดเร็ว