我写了一个小小的android应用程序,发送Http请求,从服务器接收响应,并计算了发送和接收的字节数.
代码简单如下
long receivedBytes = TrafficStats.getUidRxBytes(uid)-lastNumer
我发现,receivedBytes总是大于http Header http Body的大小,例如
我在服务器中捕获到的实际http帧大小(使用wireshark)为1645字节(标头主体),但android API返回的receiveBytes为1912,以便进行传输.
TrafficStats getUidRxBytes本身是不准确的(可能是这个问题特定于我的带有cynogenmod 10.3的平台i9300)
最后,我找到了计算数据使用量的正确方法,也找到了其他方法来计算数据使用量,这似乎比TrafficStats API更准确.(非常感谢here)
private long[] getStat() {
String line, line2;
long[] stats = new long[2];
try {
File fileSnd = new File("/proc/uid_stat/"+uid+"/tcp_snd");
File fileRcv = new File ("/proc/uid_stat/"+uid+"/tcp_rcv");
BufferedReader br1 = new BufferedReader(new FileReader(fileSnd));
BufferedReader br2 = new BufferedReader(new FileReader(fileRcv));
while ((line = br1.readLine()) != null&& (line2 = br2.readLine()) != null) {
stats[0] = Long.parseLong(line);
stats[1] = Long.parseLong(line2);
}
br1.close();
br2.close();
} catch (Exception e) {
e.printStackTrace();
}
return stats;
}