- TrafficStats
Java层流量统计接口。
全局接口提供从系统启动以来所有网络及mobile网络的发送接收数据统计
对每个application(实际以UID划分),提供从系统启动以来所有网络发送接收的数据统计(不区分网络类型)
- TrafficStats.getMobileRxPackets 实现解析
- TrafficStats.getMobileRxPackets 实现解析
获得所有mobile类型的interface
NetworkStatsService.getMobileIfaces()
累加每个interface获得其发送数据统计
nativeGetIfaceStat() --> getIfaceStat() -> parseIfaceStat()
从内存文件"/proc/net/xt_qtaguid/iface_stat_all"中读取对应interface的统计值。
android 5.0中又有了不一样的实现:
- 实现 时间段+网络+APP+前台后台流量统计
根据TrafficStats的分析,要实现以上维护的流量统计,需要自行设计delta统计算法监听网络状态切换事件监控app状态切换事件(自行模拟)优化:由于很多app中实际有网络访问的仅部分,对每个app调用getUidTxBytes()浪费。需要进行优化:1、过滤出具有网络访问权限的app进行统计,2、检索"/proc/uid_stat/"子目录项,获取实际有数据的uid
附录:本人一款流量管理软件中流量统计模块代码(仅供参考),实现以上维度的流量统计并存入sqlite数据库