如何防止手机丢失IP流量?

时间:2011-03-17 02:06:50

标签: android 3g

我有一个简单的应用程序,定期向服务器发送HTTP_GET请求。当通过3G发送请求时,我注意到请求有时会超时(并且服务器端日志记录显示它永远不会收到请求)。

在尝试了不同的组合后,我发现了这个问题时出现了一个一致的模式(在每5-15次成功请求后它会超时)。

- TelephonyRegistry: notifyDataConnection() state=2isDataConnectivityPossible()true, reason=null
 - TelephonyRegistry: broadcastDataConnectionStateChanged() state=CONNECTEDtypes=default supl, interfaceName=rmnet0
 - NetworkLocationProvider: onDataConnectionStateChanged 3

根据Google的说法,NetworkLocationProvider更改为“DATA_SUSPENDED”,这意味着“连接已启动,但IP流量暂时不可用”。 (见TelephonyManager)。在HTTP_GET请求成功的情况下,状态更改为“8”。我的应用程序不使用位置管理,我关闭了所有其他非关键应用程序!

我想知道:

  1. 这个问题的原因是什么?为什么连接状态转到DATA_SUSPENDED?
  2. 是否有可能避免/克服这个问题?
  3. 非常感谢任何帮助/洞察力!提前谢谢!

1 个答案:

答案 0 :(得分:0)

我在使用Android 2.3.5的华为IDEOS X3上运行的应用程序存在同样的问题。该应用程序使用HttpClient每分钟将数据发送到服务器。

使用logcat我可以看到数据连接丢失,然后在一段时间后重新建立。以前我的应用程序停止工作,因为它试图在没有连接的情况下发送数据,导致未正确处理的异常。

我不知道间歇性丢弃数据连接的原因,但我现在通过在发送数据之前检查是否存在数据连接来处理这种情况。在我的情况下,如果从未发送某些数据并不重要。如果避免数据丢失很重要,我可以缓冲数据并在连接恢复后发送它。

public Boolean isDataConnection() {
    TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    return tm.getDataState() == TelephonyManager.DATA_CONNECTED;
}