หน้านี้จะอธิบายวิธีที่ 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 ให้ใช้ การทดสอบต่อไปนี้:
NetworkScoreTest
การทดสอบ CTSNetworkRanker
การทดสอบหน่วย
การใช้งานที่ไม่ถูกต้องอาจส่งผลให้ระบบส่งคืนเครือข่ายที่ไม่คาดคิดไปยัง
แอปเพื่อตอบสนองต่อการใช้งาน
NetworkCallback
,
รวมถึงการเลือกเครือข่ายเริ่มต้นของอุปกรณ์ (เครือข่ายที่ระบบ
ส่งไปยังแอปเมื่อใช้ Callback ของเครือข่ายที่มี
ConnectivityManager.registerDefaultNetworkCallback
)
อีกปัญหาหนึ่งที่อาจเกิดขึ้นได้เมื่อมีการติดตั้งใช้งานที่ไม่ถูกต้องคือ แบตเตอรี่หมดเร็ว เกิดจากตัวแทนเครือข่ายถูกถามด้วยคะแนนที่บอกว่า มีสิทธิ์สำหรับคำขอใดๆ และถูกตัดสิทธิ์ทันทีหลังจากนั้น หากเปิดและปิดตัวแทนหลายครั้ง แบตเตอรี่อาจหมดเร็ว