【问题标题】:How to detect the cause for HUGE data usage when my app in background当我的应用程序在后台时如何检测大量数据使用的原因
【发布时间】:2015-01-01 18:17:31
【问题描述】:

我们的 Android 应用拥有超过一百万的活跃用户。我们最近开始收到来自用户的反馈,他们抱怨我们的应用在后台消耗大量网络数据(每周大约 0.5-3 GB)。

应用程序在后台没有任何操作,除了没有任何网络调用的推送通知接收器。一周的后台数据消耗应该小于10兆。

当我的应用处于后台时,是否有代码可以帮助我检测造成这种数据消耗的原因?

当我的应用处于后台时,是否有办法限制来自所有 SDK 的数据访问?

一般来说,解决此类问题的最佳方法是什么?

谢谢

更新:

在我们的案例中,我们最终发现问题的根源在于我们与应用集成的 SDK。

如果您有同样的问题,我建议您仔细查看应用中的所有第 3 方代码,尤其是您添加的新库。

其次,检查您的应用在清单中定义的所有服务,仔细查看这些服务中是否有任何可能导致此问题。

第三,在应用程序中寻找使用网络操作和重试机制的地方,可能会有一个无限的“while循环”试图将一些数据发送到服务器(可能是某种报告或分析)。

【问题讨论】:

  • 你的意思是连接数据?
  • 是的,网络消费
  • 您需要提供更多信息。您的应用程序应该在后台做什么?它如何连接到互联网?您是否计算过您的应用应该使用多少数据以及该值与 0.5-3gg 的值有何不同?
  • 应用程序在后台没有任何操作,除了没有任何网络调用的推送通知接收器。一周的后台数据消耗应该小于10兆。我的猜测是某些 SDK 导致了这种情况,但我不知道如何检测是哪一个
  • 通过应用管理器检查是否有任何服务或进程正在运行?

标签: android networking


【解决方案1】:

您需要检查来自设备的网络流量。您需要一台计算机和您的设备连接到同一个本地网络。

  1. 在本地网络上的计算机上设置一个调试代理,例如Fiddler,并记下它的 IP 地址。这假设您的应用通过 HTTP 进行通信。
  2. 通过 WiFi 将您的测试设备连接到与调试机器相同的网络。
  3. 将您的 Android 设备配置为 use a proxy that points to your debugging machine

现在您将能够检查来自设备的所有请求。据推测,您将不得不让它们运行一段时间,以复制某种周期性后台服务运行和下载数据的问题。不过,我现在可以告诉你,推送通知本身不会在单个设备上造成 3GB 的数据。

【讨论】:

    【解决方案2】:

    您可以编写如下代码来计算数据使用量。

      recived = TrafficStats.getUidRxBytes(uid);// uid is your appID
    send = TrafficStats.getUidTxBytes(uid);
    
    TrafficStats.getMobileRxBytes(); 
    TrafficStats.getMobileTxBytes(); 
    
    TrafficStats.getTotalRxBytes();
    TrafficStats.getTotalTxBytes();
    

    你可以在这里找到很好的答案..

    App data usage finding

    【讨论】:

    • 我需要明确知道我的应用程序中的哪个 SDK 导致了这个问题。 TrafficStats 只能带来整个应用的统计数据
    猜你喜欢
    • 2020-01-16
    • 2010-12-29
    • 2019-12-20
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多