- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一个小的 android 应用程序,发送 Http 请求,从服务器接收响应,并计算传输和接收的字节数。代码如下
long receivedBytes = TrafficStats.getUidRxBytes(uid)-lastNumer
我发现 receivedBytes 总是大于 http Header+http Body 的大小,例如我在服务器中捕获(使用 wireshark)的实际 http 帧大小为 1645 字节( header +正文),但 android API 返回 receivedBytes 为 1912,因此传输。
TrafficStats getUidRxBytes 本身不准确(可能这个问题是我的平台 samsung i9300 和 cynogenmod 10.3 特有的)
最后,我找到了计算数据使用量的正确方法我找到了其他方法来计算数据使用量,这似乎比 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;
}
最佳答案
我看到您已经找到了解决方案,但我会在您的问题上添加我的想法,因为它可能对其他人有用(在谷歌搜索如何使用 TrafficStats API 后,我自己最终来到这里)。
Statistics are measured at the network layer, so they include both TCP and UDP usage.
文档确实可以更详尽,但我倾向于说可以假设返回的字节数还包括构成传输层 header 和网络层 header 的字节。
HTTP is an application layer protocol .当您将预期字节计算为 HTTP header 字节加上 HTTP 正文字节时,您只处理应用程序层字节,因此不考虑传输层和网络层 header 字节。我假设 TCP 用于下载。 This adds a header ranging from 20 to 60 bytes .此外,假设您使用 IPv4 进行下载。 This also adds a header ranging from 20 to 60 bytes .
显然这不会占整个 1912 - 1645 = 267 字节,但它可能会给你/其他人一些线索。
有点离题,但还是相关的。目前尚不清楚 TrafficStats API 是否实际计算 header 字节数。根据this answer , API 不计算 header 字节。但是,考虑到上面列出的 API 文档,链接的答案可能规定了不正确的内容(至少对于 API 级别 21 而言并非如此)。此外,this question还暗示 TrafficStats 实际上在计算网络和传输层 header 字节(查看评论)。
TrafficStats 实际上计算网络和传输层 header 字节。参见 kernel source和 TrafficStatsTest .
关于android TrafficStats getUidRxBytes 不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25440796/
我正在尝试使用 TrafficStats 获取移动数据使用情况。 例子: mobileDataUsage = TrafficStats.getMobileRxBytes() +TrafficStats
当我打开 wifi 并连接时,TrafficStats.getMobileRxBytes() 和 TrafficStats.getMobileTxBytes() 总是返回 0,但是关闭 wifi,得到
我想获得一些有关获取日期间隔之间的 3G 数据统计信息的帮助。据我所知,我应该使用 TrafficStats(Android api 2.2 或更高版本)。我想将此信息保存到 SQLite 表中以每月
我花了一些时间研究了 volley 的实现,并在类 NetworkDispatcher 中找到了这段代码: // Tag the request (if API >= 14)
我的应用程序使用 TrafficStats 来测量来自 3G 连接的传入字节数。出于某种原因,在我 friend 的三星 Galaxy SII 上运行我的应用程序时,该值似乎在一段时间后重置为零。 我
我正在尝试测量我的应用收到了多少字节。我这样做: long receivedBytesBefore = TrafficStats.getTotalRxBytes(); ... doSomething(
我写了一个小的 android 应用程序,发送 Http 请求,从服务器接收响应,并计算传输和接收的字节数。代码如下 long receivedBytes = TrafficStats.getUidR
(我认为这是一个常见问题,但请不要太快将其标记为重复,因为我相信我的回答为讨论增添了新内容。) 相关的API是TrafficStats ,它从例如获取数据/proc/uid_stat/. 统计信息必须
我的应用正在尝试计算通过 WiFi/LAN 和移动数据连接发送和接收的字节数。为此,我在某个时间点获取了 TrafficStats 计数器的值,并在下次检查时从其值中减去该值。 // get curr
有什么方法可以按天获取网络流量/数据使用情况? (我对实时跟踪不感兴趣) 示例:启动应用程序 (APK),搜索 30 天前的一些网络流量日志,并显示一些总字节数。 TrafficStats 类可以返回
TrafficStats.incrementOperationCount() 的文档说: Increment count of network operations performed under t
我正在制作一个软件来播放在线视频,我正在尝试向软件添加流量统计功能。我尝试使用 TrafficStats 和 getUidRxBytes 函数。但是,它不计算 videoview 的净流量。像下面的代
我正在尝试在我的代码中获取流量统计信息。但是当我使用 TrafficStats.getUidTxBytes(uid) 它总是返回-1,即 TrafficStats.UNSUPPORTED 我不确定如何
我想获取android应用产生的准确网络流量:: long totalTraffic = TrafficStats.getUidRxBytes(uid) + TrafficStats.getUidTx
我制作了这个程序,我的 TrafficStats.getUidRxBytes() 方法一直给我 0。我检查了我的应用程序并有数据使用记录,但我的代码没有显示接收和发送数据量的数据使用量。另外,当我打印
我试图弄清楚我使用 OkHttpClient 发送的请求具体使用了多少我的应用程序数据,我发现我可以使用 TrafficStats标记线程,然后使用标记查看它的网络 Activity 。 如果我做类似
我知道我可以使用以下 trafficstats api 方法来获取任何给定应用程序的所有网络接口(interface)发送和接收的字节数。但是我如何只获取移动设备的统计信息?这样我就可以将移动数据和
我正在尝试获取从设备传输的字节总数(使用 getMobileTxBytes() 。 我从模拟器中的方法调用中得到的数字是 -1(这意味着该方法在设备上不受支持)。有没有办法让模拟器在这里返回一个合理的
对Android的TrafficStats的以下两种方法有疑惑:getUidTxBytes(int uid) 和 getUidRxBytes(int uid) ,这两个方法返回通过网络为此 UID 传
使用 TrafficStats 我正在检查 youtube 应用程序数据使用情况。在某些设备上它工作正常,但在许多其他设备上却不行。 我从开发者网站发现,这些统计数据可能并非在所有平台上都可用。如果此
我是一名优秀的程序员,十分优秀!