从流量统计计算中排除某些流量



我正在使用TrafficStats来监控我的应用程序的数据使用情况。到目前为止,它工作正常。

但是我想通过 newtork 实时将这些数据发送到我的服务器(例如每秒使用量)。如果我只是按原样使用代码,则从我的应用程序到我的服务器的流量也将添加到发送和接收的字节中。这是不希望的。我想排除发送到我的服务器的数据。

一个可能的解决方案是我的应用程序可以创建另一个"应用程序",从而创建新的 UID。然后,我只能监控父应用程序的流量统计信息。但这需要大量的代码更改和一些副作用(例如一个应用程序被杀死/暂停,而另一个应用程序没有)。

我还可以使用该方法TrafficStats.setThreadStatsTag(int tag)方法来标记套接字并仅使用标记的套接字对我的服务器进行网络操作。然后我可以从总数中减去它以获得所需的结果。请帮助我如何实现这一点。

另一种解决方案可能是监视我的服务器接收和发送的内容,以便我可以从每秒包含流量的数据中减去此流量。但问题是我无法理解从每秒数据的特定间隔中减去多少。

对我提到的可能解决方案或任何其他解决方案的任何想法将不胜感激。谢谢。

线程和套接字标记可用于 DDMS 目的,以允许分析和调试您自己的应用程序。在这种情况下,您需要指定要标记的线程/套接字,然后将数据输出到 DDMS。请注意,这仅在 Android 4.0.3 中完全受支持。您可以在此处找到有关实施的详细信息

如果您有兴趣跟踪自己的应用数据使用情况,

而不包括报告机制生成的数据,则可以创建另一个应用来跟踪您的应用数据使用情况。在这种情况下,您将需要实施一些黑客攻击,以绕过TrafficStats API,该API目前在Android 4.3中已损坏,并且不允许您对自己的UID以外的其他UID进行统计信息收集。您可以看到此线程以进一步了解,您可以在此处找到确切的解决方案

如果您确切知道报告机制产生了多少流量,则可以使用流程 UID 上的 TrafficStats API 监控您自己的应用,并从结果中减去该流量。TrafficStats API 目前允许提取 TCP 字节,这意味着您可以使用 Wireshark/tcpdump 计算为您的报告机制发送的 TCP 字节量。

最新更新