android 流量监控类TrafficStas
TrafficStats类存在好几个查看流量的方法
getMobileRxBytes()
getTotalRxBytes()
getUidRxBytes() && getUidTxBytes函数
测试时发现各进程getUidRxBytes的值的总值与MobileRxBytes不一致
查看了下getUidRxBytes() && getUidTxBytes函数native 代码发现此方法通过读取
"/proc/uid_stat/%d/tcp_rcv" 和"/proc/uid_stat/%d/tcp_snd"文件来获取流量 ,其中%d为进程uid。
这两个文件为非标准linux内核文件,由android内核层/kernel/net/Socket.c 的__sock_sendmsg函数负责写入,
用户层套接字通信在内核层最终会调用此函数 (包括本地套接字和网络套接字),
因此根据TrafficStats.getUidRxBytes() && getUidTxBytes获取的流量既包括了网络流量亦包括了本地流量
而MobileRxBytes
读取的sys/class/net/rmnet0/statistics/rx_bytes
读取的sys/class/net/ppp0/statistics/rx_bytes
此为linux标准内核,略过
1 楼 timchen6824 2011-08-25 你好~~我想问下。有没有办法获得 自己应用的流量统计的数据
有的话 需要怎么做? 谢谢 2 楼 前前后左右右 2011-12-08 你好,请问本地流量是什么意思,是wifi吗,如果只统计移动网络的流量,应该读哪个文件 3 楼 aaapei 2011-12-22 timchen6824 写道你好~~我想问下。有没有办法获得 自己应用的流量统计的数据
有的话 需要怎么做? 谢谢
getUidRxBytes前前后左右右 写道你好,请问本地流量是什么意思,是wifi吗,如果只统计移动网络的流量,应该读哪个文件
本地进程的socket通信