1

我有一个简单的应用程序,它会定期向服务器发送 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. 是否有可能避免/克服这个问题?

非常感谢对此的任何帮助/见解!提前致谢!

4

1 回答 1

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;
}
于 2012-03-31T05:44:33.377 回答