2011-03-17 2 views
1

나는 서버에 주기적으로 HTTP_GET 요청을 보내는 간단한 앱을 가지고있다. 3G를 통해 요청을 보낼 때 요청이 시간 초과되는 것으로 나타났습니다 (서버 측 로깅은 요청을받지 못한다는 것을 보여줍니다).전화가 IP 트래픽을 잃지 않도록하려면 어떻게해야합니까?

다른 조합을 시도한 후에이 문제가 발생했을 때 일관된 패턴을 발견했습니다 (5-15 회 성공한 요청마다 시간 초과 됨). 구글에 따르면

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

는 NetworkLocationProvider는 "연결이 최대이지만, IP 트래픽이 일시적으로 사용할 수 없습니다"을 의미하는 'DATA_SUSPENDED'로 변경됩니다. ( TelephonyManager 참조). HTTP_GET 요청이 성공하는 상황에서 상태는 '8'로 변경됩니다. 내 응용 프로그램은 위치 관리를 사용하지 않고 실행중인 중요하지 않은 다른 모든 응용 프로그램을 종료했습니다!

내가 알고 싶은 :

  1. 이 문제의 원인이 무엇입니까? 연결 상태가 DATA_SUSPENDED로가는 이유는 무엇입니까?
  2. 이 문제를 피하거나 극복 할 수 있습니까?

이 도움말/통찰력은 대단히 감사합니다! 미리 감사드립니다!

+0

이 연결 속도는 얼마나됩니까? 우리는 1ms에 15 번의 연결 시도를하고 있습니까? –

+0

각 HTTP_GET 요청은 약 10 초 간격으로 진행되었으며 Android 2.1을 실행하는 HTC Hero에있었습니다. – Thira

+0

정말 가난한 지역에있을 가능성이 있습니까? –

답변

0

Android 2.3.5를 사용하는 Huawei IDEOS X3에서 실행되는 앱과 동일한 문제가 있습니다. 앱은 HttpClient를 사용하여 1 분마다 데이터를 서버로 보냅니다.

logcat을 사용하면 잠시 후에 데이터 연결이 끊어지고 다시 연결되는 것을 볼 수 있습니다. 이전에는 내 응용 프로그램이 제대로 전달되지 않은 예외를 일으키는 연결하지 않고 데이터를 보내려고했기 때문에 작동을 멈췄습니다.

간헐적으로 데이터 연결이 끊어진 이유를 모르지만 이제는 데이터를 보내기 전에 데이터 연결이 있는지 확인하여 상황을 처리합니다. 제 경우에는 어떤 데이터가 전송되지 않아도 상관 없습니다. 데이터 손실을 피하는 것이 중요하다면 데이터가 버퍼링되어 다시 연결되면 데이터를 보낼 수 있습니다.

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