ใน Android 4.0 ระบบจะบันทึกสถิติที่อินเทอร์เฟซเครือข่าย Linux รายงานไว้เมื่อเวลาผ่านไป และใช้เพื่อบังคับใช้ขีดจำกัดโควต้าเครือข่าย แสดงผลแผนภูมิที่ผู้ใช้มองเห็น และอื่นๆ
โปรแกรมควบคุมอุปกรณ์เครือข่ายแต่ละรายการ (รวมถึง Wi-Fi) ต้องเป็นไปตามวงจรของอุปกรณ์เคอร์เนลมาตรฐาน และแสดงสถิติที่ถูกต้องผ่าน dev_get_stats()
โดยเฉพาะอย่างยิ่ง สถิติที่แสดงผลต้องเพิ่มขึ้นอย่างสม่ำเสมอขณะที่อินเทอร์เฟซทำงานอยู่ โปรแกรมควบคุมจะรีเซ็ตสถิติได้ก็ต่อเมื่อ unregister_netdev()
หรือรายการที่เทียบเท่าซึ่งสร้างเหตุการณ์ NETDEV_UNREGISTER
สําหรับการเรียกกลับที่ลงทะเบียนด้วย register_netdevice_notifier()
/
register_inetaddr_notifier()
/ register_inet6addr_notifier()
เสร็จสมบูรณ์แล้วเท่านั้น
โดยปกติแล้วผู้ให้บริการเครือข่ายมือถือจะวัดปริมาณการใช้อินเทอร์เน็ตที่ชั้นอินเทอร์เน็ต (IP) เพื่อให้สอดคล้องกับแนวทางนี้ใน Android 4.0 เราอาศัยข้อเท็จจริงที่ว่า
สำหรับอุปกรณ์เคอร์เนลที่เราสนใจ rx_bytes
และ tx_bytes
ค่าที่ dev_get_stats()
แสดงผลจะแสดงข้อมูลที่โอนในเลเยอร์อินเทอร์เน็ต (IP
) ไบต์อย่างตรงที่สุด แต่เราเข้าใจว่าอุปกรณ์อื่นๆ อาจไม่เป็นไปตามนี้ ขณะนี้ฟีเจอร์นี้ใช้ลักษณะเฉพาะนี้ ไดรเวอร์ใหม่ควรมีพร็อพเพอร์ตี้ดังกล่าวด้วย และค่า dev_get_stats()
ต้องไม่มีค่าใช้จ่ายเพิ่มเติมในการเข้ารหัสของเลเยอร์เครือข่ายที่ต่ำกว่า (เช่น ส่วนหัวอีเทอร์เน็ต) และไม่ควรรวมการรับส่งข้อมูลอื่นๆ (เช่น ARP) เว้นแต่จะมีค่าเล็กน้อย
เฟรมเวิร์ก Android จะรวบรวมสถิติจากอินเทอร์เฟซเครือข่ายที่เชื่อมโยงกับ NetworkStateTracker
ใน ConnectivityService
เท่านั้น ซึ่งช่วยให้เฟรมเวิร์กระบุอินเทอร์เฟซเครือข่ายแต่ละรายการได้อย่างแน่ชัด รวมถึงประเภท (เช่น TYPE_MOBILE
หรือ TYPE_WIFI
) และข้อมูลประจำตัวของผู้สมัครใช้บริการ (เช่น IMSI) อินเทอร์เฟซเครือข่ายทั้งหมดที่ใช้เพื่อกำหนดเส้นทางข้อมูลควรแสดงด้วย NetworkStateTracker
เพื่อให้สามารถพิจารณาสถิติได้อย่างถูกต้อง