0

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

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

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

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

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

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

4

1 回答 1

0

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

如果您有兴趣跟踪自己的应用程序数据使用情况,但不包括报告机制生成的数据,您可以创建另一个应用程序来跟踪您的应用程序数据使用情况。在这种情况下,您将需要实现一些 hack,以绕过目前在 Android 4.3 中被破坏的 TrafficStats API,并且不允许您收集除您自己的 UID 之外的其他 UID 的统计信息。您可以查看此线程以进一步了解,您可以在此处找到确切的解决方案

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

于 2013-10-27T01:11:19.663 回答