در Android 4.0، آمارهای گزارش شده توسط رابط های شبکه لینوکس در طول زمان ثبت می شود و برای اعمال محدودیت های سهمیه شبکه، ارائه نمودارهای قابل مشاهده برای کاربر و موارد دیگر استفاده می شود.
هر درایور دستگاه شبکه (شامل 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
نشان داده شوند تا آمار به درستی محاسبه شود.