في Android 4.0 ، يتم تسجيل الإحصائيات التي تم الإبلاغ عنها بواسطة واجهات شبكة Linux بمرور الوقت ، ويتم استخدامها لفرض حدود حصة الشبكة ، وعرض المخططات المرئية للمستخدم ، والمزيد.
يجب أن يتبع كل برنامج تشغيل جهاز شبكة (يتضمن Wi-Fi) دورة حياة جهاز kernel القياسية ، ويعيد الإحصائيات الصحيحة من خلال dev_get_stats()
. على وجه الخصوص ، يجب أن تظل الإحصائيات التي يتم إرجاعها رتيبة تمامًا أثناء تنشيط الواجهة. لا يجوز للسائقين إعادة تعيين الإحصائيات إلا بعد إكمال unregister_netdev()
بنجاح أو ما يعادله والذي ينشئ حدث NETDEV_UNREGISTER
لعمليات الاستدعاء المسجلة مع register_netdevice_notifier()
/ register_inetaddr_notifier()
/ register_inet6addr_notifier()
.
يقيس مشغلو الهاتف المحمول عادةً استخدام البيانات على طبقة الإنترنت (IP). لمطابقة هذا الأسلوب في Android 4.0 ، نعتمد على حقيقة أنه بالنسبة لأجهزة kernel ، فإننا نهتم rx_bytes
و tx_bytes
التي يتم إرجاعها بواسطة dev_get_stats()
تُرجع بالضبط بايت طبقة الإنترنت ( IP
) المنقولة. لكننا نتفهم أنه قد لا يكون الأمر كذلك بالنسبة للأجهزة الأخرى. في الوقت الحالي ، تعتمد الميزة على هذه الخصوصية. يجب أن تحتوي برامج التشغيل الجديدة على هذه الخاصية أيضًا ، ويجب ألا تتضمن قيم dev_get_stats()
أي عبء تغليف لطبقات الشبكة السفلية (مثل رؤوس Ethernet) ، ويفضل ألا تتضمن حركة مرور أخرى (مثل ARP) ما لم تكن مهملة.
يجمع إطار عمل Android الإحصائيات فقط من واجهات الشبكة المرتبطة بـ NetworkStateTracker
في ConnectivityService
. يتيح ذلك لإطار العمل تحديد كل واجهة شبكة بشكل ملموس ، بما في ذلك نوعها (مثل TYPE_MOBILE
أو TYPE_WIFI
) وهوية المشترك (مثل IMSI). يجب أن يتم تمثيل جميع واجهات الشبكة المستخدمة لتوجيه البيانات بواسطة NetworkStateTracker
بحيث يمكن حساب الإحصائيات بشكل صحيح.