我正在开发一个上载大量数据的应用程序。我想确定上传的传输速率,以显示在通知中。
我对这些帖子中的答案不满意,因此我再次询问。
我看过显示上传传输速率的应用程序,以及一些自定义ROM,例如Resurrection Remix。
如何确定这些上传的传输速率?
我写了一个小小的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)