我认为最好的解决方案是使用wireshark之类的东西来衡量你的应用程序的各种网络操作所使用的数据,然后手动跟踪你的数据消耗。这当然是可行的。
我这么说是因为 TrafficStats 中的 bug 积累得更快,然后才被修复,补丁被忽略,所以我的印象是 TrafficStats 没有得到维护,应该避免。JBQ 在他辞职之前分配了很多,但我相信他只是在清理。我意识到 Android 设置包括数据使用统计信息。我没有调查过,但猜想这些也不可靠(对不起,我很懒,但我已经得出结论,如果我只是手动进行计算,我会浪费更少的时间)。
以下是我在查看通用 API 时遇到的一些交通统计错误(一些问题在 TrafficStats,一些源自内核)。我还没有尝试过基于线程/标签/套接字的 API,并且目前不打算根据我的经验来尝试,但我很想知道它们是否能更好地工作。
在 2.x
Android TrafficStats.getTotalRxBytes() 低于预期
在 3.x
TrafficStats.getMobileRxBytes() 和 TrafficStats.getMobileTxBytes() 中:
https
://code.google.com/p/android/issues/detail?id=
19938 TrafficStats API 不报告 UDP 流量,即使 API 级别 12 及以上他们应该得到支持(从未修复):
https ://code.google.com/p/android/issues/detail?id=32410
在 4.3 中,getUid API 完全被破坏了,但听起来他们可能正在计划修复这个错误。无论如何,如果该漏洞已泄露给 Google 的合作伙伴,那么我认为这些 API 在可预见的未来将毫无用处。
TrafficStats.getUidRxBytes 和 getUidTxBytes 在 4.3 中始终返回 0:
https
://code.google.com/p/android/issues/detail?id=58210
并查看此 SO 帖子。