หน้านี้อธิบายวิธีที่ Android เลือกเครือข่ายที่พร้อมใช้งานพร้อมกัน กลไกการเลือกเครือข่ายนี้ส่งผลต่อวิธีที่ Android ตอบสนองต่อคำขอเครือข่ายของแอปและระบบ รวมถึงมีอิทธิพลต่อวิธีที่ Android เลือกเครือข่ายเริ่มต้นสำหรับแอป
ลักษณะการทำงานของการเลือกเครือข่าย
ส่วนนี้อธิบายลักษณะการทำงานของการเลือกเครือข่ายสำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป และสำหรับอุปกรณ์ที่ใช้ Android 11 (API ระดับ 30) ลงไป
Android 12
สำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป Android จะใช้
คลาส NetworkScore เพื่อเลือกเครือข่ายที่พร้อมใช้งาน คลาสนี้มีแฟล็กที่ใช้ในการตัดสินใจเกี่ยวกับนโยบาย แฟล็กแต่ละรายการแสดงถึงแอตทริบิวต์เครือข่ายที่มีความสำคัญต่อการเลือกเครือข่าย
Network Agent (NetworkAgent) ใช้แฟล็ก POLICY_TRANSPORT_PRIMARY
เพื่อระบุว่า Android ต้องการใช้เครือข่ายหากมีเครือข่ายหลายเครือข่ายที่มีการรับส่งข้อมูลประเภทเดียวกัน ตัวอย่างเช่น อุปกรณ์แบบ 2 ซิมจะมีสวิตช์ในการตั้งค่า ที่ช่วยให้คุณเลือกซิมการ์ดที่จะใช้โดยค่าเริ่มต้นได้ ภายในประเภทการรับส่งข้อมูลที่กำหนด Android จะต้องการใช้เครือข่ายที่มีแฟล็ก POLICY_TRANSPORT_PRIMARY มากกว่าเครือข่ายที่ไม่มีแฟล็ก
Network Agent ใช้แฟล็ก POLICY_EXITING เพื่อระบุเครือข่ายที่
คาดว่าจะตัดการเชื่อมต่อ ตัวอย่างเช่น คุณภาพเครือข่าย Wi-Fi จะลดลงหากผู้ใช้ออกจากระยะของเครือข่าย Android จะหลีกเลี่ยงการใช้เครือข่ายที่มีแฟล็กนี้หากมีเครือข่ายอื่นที่ไม่มีแฟล็กนี้พร้อมใช้งาน Network Agent แต่ละรายการสามารถกำหนดได้ว่าเมื่อใดที่เครือข่ายเสื่อมสภาพจนถือว่าออกจากระบบ
คลาส NetworkScore ยังช่วยให้ Network Agent ประกาศได้ว่า Android จะรักษาการเชื่อมต่อเครือข่ายไว้โดยใช้แฟล็ก KEEP_CONNECTED_FOR_HANDOVER และเมธอด
NetworkScore.Builder.setKeepConnectedReason แฟล็ก KEEP_CONNECTED_FOR_HANDOVER นี้ช่วยเครือข่ายที่คาดหวัง แฟล็กนี้ช่วยให้ Network Agent เปิดเครือข่ายใน Wi-Fi STA รองได้โดยไม่ต้องทำให้เป็นเครือข่ายหลักจนกว่า Android จะประเมินประสิทธิภาพของเครือข่าย หาก Network Agent ไม่ประกาศแฟล็กนี้ Android จะปิดเครือข่ายที่คาดหวังเนื่องจากไม่ได้ให้บริการคำขอใดๆ ก่อนที่ Agent จะประเมินประสิทธิภาพของเครือข่าย
หากเครือข่าย 2 เครือข่ายสามารถให้บริการคำขอที่กำหนดและมีนโยบายเทียบเท่ากัน Android จะต้องการใช้เครือข่ายที่ให้บริการคำขอ หากไม่มีเครือข่ายใดให้บริการคำขอ Android จะเลือกเครือข่ายใดเครือข่ายหนึ่ง เครือข่ายนี้จะยังคงเป็นเครือข่ายที่ต้องการจนกว่าแฟล็กนโยบายจะเปลี่ยนแปลง
ฟีเจอร์การเลือกเครือข่ายมีการติดตั้งใช้งานในโมดูลการเชื่อมต่อใน
โครงการโอเพนซอร์ส Android (AOSP) ตรรกะนโยบายสำหรับการเลือกเครือข่าย
อยู่ในคลาส NetworkRanker และคลาสตัวช่วย ซึ่งหมายความว่าผู้ผลิตอุปกรณ์ไม่สามารถปรับแต่งโค้ดการเลือกเครือข่ายได้โดยตรง แต่ต้องใช้แฟล็กใน NetworkScore เพื่อสื่อสารข้อมูลเกี่ยวกับเครือข่าย
Android 11
สำหรับอุปกรณ์ที่ใช้ Android 11 ลงไป Android จะเลือกเครือข่าย
ตามจำนวนเต็มที่ส่งจาก Network Agent (NetworkAgent) โดยสำหรับคำขอแต่ละรายการ
Android จะเลือกเครือข่ายที่มีคะแนนตัวเลขสูงสุดที่สามารถ
ตอบสนองคำขอได้ คะแนนตัวเลขนี้ประกอบด้วยจำนวนเต็มที่ Network Agent ส่ง รวมถึงโบนัสหรือค่าปรับเพิ่มเติม Android จะใช้โบนัสหรือค่าปรับเหล่านี้ตามเงื่อนไข เช่น เครือข่ายได้รับการตรวจสอบแล้วหรือเป็น VPN Network Agent จะซิงค์กันเพื่อตัดสินใจเกี่ยวกับนโยบาย
หากเครือข่าย 2 เครือข่ายสามารถให้บริการคำขอที่กำหนดและมีคะแนนตัวเลขเท่ากัน ลักษณะการทำงานจะไม่ได้รับการกำหนด
คลาส NetworkScore
คลาส NetworkScore เป็นหัวใจสำคัญของฟีเจอร์การเลือกเครือข่าย คลาสนี้มี API และเอกสารประกอบสำหรับแฟล็กที่พร้อมใช้งานและเมธอด NetworkScore.Builder.setKeepConnectedReason
คุณต้องสร้างคลาส NetworkScore โดยใช้คลาส Builder และส่งไปยัง
เครื่องมือสร้าง NetworkAgent ในระหว่างการเริ่มต้น คุณอัปเดต
คะแนนเครือข่ายได้ทุกเมื่อโดยใช้NetworkAgent#sendNetworkScore
เมธอด
ตัวอย่างการติดตั้งใช้งาน Network Agent
AOSP มีตัวอย่างการติดตั้งใช้งาน Network Agent ต่างๆ รายการต่อไปนี้แสดงตัวอย่างการติดตั้งใช้งาน
TelephonyNetworkAgent: ใช้คะแนนเครือข่ายเพื่อสื่อสารนโยบายสำหรับเครือข่ายมือถือClientModeImpl.WifiNetworkAgent: ใช้คะแนนเครือข่ายเพื่อสื่อสารนโยบายสำหรับเครือข่าย Wi-Fi การติดตั้งใช้งานนี้ให้ความเข้ากันได้แบบย้อนหลังกับจำนวนเต็มเดิมสำหรับคะแนนเครือข่ายโดยใช้แฟล็กPOLICY_EXITING
อุปกรณ์ที่อัปเกรดเป็น Android 12
ผู้ผลิตอุปกรณ์ที่อัปเกรดอุปกรณ์เป็น Android 12 ต้องแก้ไขการติดตั้งใช้งาน Network Agent เพื่อใช้คลาส NetworkScore จำนวนเต็มเดิมที่ใช้ใน Android 11 ลงไปจะส่งใน NetworkScore แต่จะใช้สำหรับการบันทึกและการป้องกันการถดถอยใน Android 12 เท่านั้น ใน Android 12 ผู้ผลิตอุปกรณ์ต้องแสดงการเปลี่ยนแปลงโดยใช้แฟล็ก NetworkScore จากนั้นโมดูล Connectivity Mainline จะใช้แฟล็กเพื่อตัดสินใจเลือกเครือข่าย ผู้ผลิตอุปกรณ์ที่ใช้โค้ดสำหรับ Android 11 ลงไปแต่สร้างเทียบกับการติดตั้งใช้งานใน Android 12 อาจพบข้อผิดพลาดในการบิลด์เนื่องจากระบบได้นำเมธอดสำหรับการอัปเดตจำนวนเต็มเดิมออกใน Android 12
สำหรับ Network Agent ที่ใช้คลาส NetworkFactory ภายใน คุณต้อง
แสดงตัวกรองคะแนนในออบเจ็กต์ NetworkScore ที่แสดงถึง
คะแนนสูงสุดของเครือข่ายที่ Factory สร้างได้ เนื่องจากใน Android 12 คลาส NetworkFactory จะส่งเฉพาะคำขอที่ตรงกับตัวกรองคะแนนที่ประกาศไว้ใน NetworkFactory เท่านั้น ซึ่งแตกต่างจากใน Android 11 ลงไปที่จะส่งคำขอทั้งหมด
คุณสามารถส่งตัวกรองเพื่อลดความซับซ้อนในการติดตั้งใช้งานและประหยัดแบตเตอรี่ ซึ่งจะช่วยให้ NetworkFactory ไม่ต้องประมวลผลคำขอทั้งหมด อย่างไรก็ตาม หากการติดตั้งใช้งานที่กำหนดเอง
กำหนดให้ต้องส่งคำขอทั้งหมดไปยัง NetworkFactory คุณสามารถ
ลงทะเบียน NetworkFactory.registerIgnoringScore แทนเมธอดปกติ
NetworkFactory.registerได้ หากใช้วิธีนี้ ให้ส่งตัวกรองคะแนนที่แสดงถึงคะแนนที่ดีที่สุดที่ Factory สร้างได้แม่นยำที่สุด
ซึ่งจะช่วยประหยัดแบตเตอรี่โดยป้องกันการประเมินคำขอที่ Factory ไม่สามารถดำเนินการได้
การตรวจสอบ
หากต้องการตรวจสอบลักษณะการทำงานของการเลือกเครือข่ายในอุปกรณ์ที่ใช้ Android ให้ใช้การทดสอบต่อไปนี้
- การทดสอบ
NetworkScoreTestCTS - การทดสอบหน่วย
NetworkRanker
การติดตั้งใช้งานที่ไม่ถูกต้องอาจทำให้เครือข่ายที่ไม่คาดคิดกลับมายังแอป
เมื่อแอปใช้ NetworkCallback ซึ่งรวมถึงการเลือกเครือข่ายเริ่มต้นของอุปกรณ์ (เครือข่ายที่ระบบส่งไปยังแอปเมื่อแอปใช้ Network
Callback เช่น
ConnectivityManager.registerDefaultNetworkCallback)
ปัญหาอีกประการหนึ่งที่อาจเกิดขึ้นจากการติดตั้งใช้งานที่ไม่ถูกต้องคือแบตเตอรี่หมดเร็ว ซึ่งเกิดขึ้นเมื่อ Network Agent ทำงานด้วยคะแนนที่ไม่ทำให้ Agent มีสิทธิ์ได้รับคำขอใดๆ และระบบจะปิด Agent ทันทีหลังจากนั้น หาก Agent เปิดและปิดซ้ำๆ อาจทำให้แบตเตอรี่หมดเร็ว