Android 4.0 では、Linux ネットワーク インターフェースから報告された統計情報が経時的に記録され、ネットワークの割り当て量上限の適用や、ユーザーに表示されるグラフのレンダリングなどに使用されます。
各ネットワーク デバイス ドライバ(Wi-Fi 込み)は、標準的なカーネル デバイスのライフサイクルに従い、dev_get_stats()
を通じて正しい統計情報を返す必要があります。特に、インターフェースがアクティブである間、返される統計情報は厳密に単調でなければなりません。ドライバは、unregister_netdev()
、または register_netdevice_notifier()
/ register_inetaddr_notifier()
/ register_inet6addr_notifier()
で登録されたコールバックの NETDEV_UNREGISTER
イベントを生成する同等の処理が正常に完了した後にのみ、統計情報をリセットできます。
携帯通信会社は通常、インターネット層(IP)でのデータ使用量を測定します。Android 4.0 ではこのアプローチに合わせるために、カーネル デバイスについて、dev_get_stats()
が返す rx_bytes
値と tx_bytes
値が、転送されたインターネット層(IP
)のバイト数を正確に返すという事実に依存しています。しかし、他のデバイスではそうならない可能性があります。現在のところ、この機能はこうした特性に依存しています。新しいドライバにもそのプロパティが必要であり、また dev_get_stats()
値には下位ネットワーク層のカプセル化オーバーヘッド(イーサネット ヘッダーなど)を含めてはなりません。無視できる場合を除き、好ましくは他のトラフィック(ARP など)を含めるべきではありません。
Android フレームワークは、ConnectivityService
の NetworkStateTracker
に関連付けられたネットワーク インターフェースからのみ、統計情報を収集します。これによりフレームワークは、タイプ(TYPE_MOBILE
や TYPE_WIFI
など)とサブスクライバー ID(IMSI など)を含め、各ネットワーク インターフェースを具体的に識別できます。データのルーティングに使用されるすべてのネットワーク インターフェースは、統計情報を正しく反映できるように、NetworkStateTracker
で表す必要があります。