对以下两种android流量统计方法产生混淆:
getuidtxbytes(int uid)和getuidrxbytes(intuid),
这两个方法返回通过网络为此uid发送和接收的字节数。但是它的时间单位是多少,是每秒吗?
如果我想计算每个应用程序每天发送和接收的数据,我应该怎么做。我想有一种方法,用sql存储数据,并继续向表中添加数据。这是正确的方式吗?
最佳答案
这些计数器是“接口启动后”或“具有此uid的应用程序启动后”的计数器。所以说,如果你的手机进入“飞行模式”,然后返回,计数器可能会再次从零开始。如果需要每秒值,则需要每秒调用这些函数,然后使用上次调用的增量。如果delta为负,则按原样使用该值,这意味着计数器再次从零开始。
还有一件事:据我所知,这些计数器只计算TCP/IP。不是udp。因此,如果您需要非常精确的计算,并且所讨论的应用程序使用udp/ip或除了tcp之外的任何其他协议,那么这些计数器将是错误的。
要了解这个功能是如何工作的,请看android的源码,免费提供。有问题的文件./frameworks/base/core/jni/android_net_TrafficStats.cpp
此函数从/proc/uid_stat/[uid]/tcp_snd
获取数据。如果你需要更多的信息,你需要深入到Linux内核…