小编Sal*_*ndo的帖子

android TrafficStats getUidRxBytes不正确

我写了一个小小的android应用程序,发送Http请求,从服务器接收响应,并计算了发送和接收的字节数。代码简单如下

long receivedBytes = TrafficStats.getUidRxBytes(uid)-lastNumer
Run Code Online (Sandbox Code Playgroud)

我发现ReceivedBytes总是大于http Header + http Body,例如我在服务器中捕获(使用wireshark)的实际http帧大小为1645 bytes(header + body),但是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();
    } …
Run Code Online (Sandbox Code Playgroud)

android http frame

3
推荐指数
1
解决办法
1692
查看次数

标签 统计

android ×1

frame ×1

http ×1