我正在使用TrafficStats来监控我的应用的数据使用情况。它现在工作正常。
但是我想通过newtork将这些数据实时发送到我的服务器(比如每秒使用)。如果我只是按原样使用代码,那么从我的应用程序到我的服务器的流量也将被添加到发送和接收的字节中。这是不希望的。我想排除发送到我服务器的数据。
一个可能的解决方案是我的应用可以创建另一个“应用”,从而创建一个新的UID。然后,我只能监控父应用程序的TrafficStats。但这需要大量的代码更改和一些副作用(比如一个应用程序被杀/暂停而另一个不是)。
我还可以使用方法TrafficStats.setThreadStatsTag(int tag)
方法来标记套接字
并仅使用带标记的套接字对我的服务器进行网络操作。然后我可以从总数中减去这个以获得所需的结果。请帮助我如何实现这一点。
另一个解决方案可能是监控我的服务器收到和发送的内容,以便我可以从包含每秒流量的数据中减去这个数据。但问题是我无法理解从特定的每秒数据间隔中减去多少。
对我提到的可能的解决方案或任何其他解决方案的任何想法将不胜感激。感谢信。
答案 0 :(得分:0)
线程和套接字标记可用于DDMS目的,以允许分析和调试您自己的应用程序。在这种情况下,您需要指定要标记的线程/套接字,然后将数据输出到DDMS。 请注意,Android 4.0.3仅支持此功能。 您可以找到有关实施的详细信息here
如果您有兴趣跟踪自己的应用数据使用情况,而不包括报告机制生成的数据,则可以创建另一个应用来跟踪您的应用数据使用情况。在这种情况下,您需要实现一些黑客,它将绕过目前已针对Android 4.3进行破坏的TrafficStats API,并且不允许您为自己的其他UID收集统计信息。 您可以看到此主题进一步了解,您可以找到确切的解决方案here
如果您确切知道报告机制产生了多少流量,您可以使用流程UID上的TrafficStats API监控自己的应用,并从结果中减去该数量。 TrafficStats API允许当前对TCP字节进行提取,这意味着您可以使用Wireshark / tcpdump计算为报告机制发送的TCP字节数量。