2011-03-17 4 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 

Согласно Google, NetworkLocationProvider изменяется на «DATA_SUSPENDED», что означает «соединение, но IP-трафика временно недоступен». (см. TelephonyManager). В ситуациях, когда запросы HTTP_GET удаются, состояние изменяется на «8». Мое приложение не использует управление местоположением, и я отключил любое другое некритическое приложение от запуска!

Я хочу знать:

  1. Что является причиной этой проблемы? Почему состояние соединения переходит в DATA_SUSPENDED?
  2. Можно ли избежать этой проблемы?

Любая помощь/понимание этого очень ценится! Заранее спасибо!

+0

Какова скорость этих соединений? Мы говорим, как 15 попыток подключения за 1 мс? –

+0

Каждый запрос HTTP_GET находился примерно на расстоянии 10 секунд и находился на HTC Hero под управлением Android 2.1. – Thira

+0

Возможно ли, что вы находитесь в зоне, где вы получаете очень плохой сигнал? –

ответ

0

У меня такая же проблема с моим приложением, работающим на Huawei IDEOS X3 с Android 2.3.5. Приложение отправляет данные каждую минуту на сервер с помощью HttpClient.

Использование logcat Я вижу, что соединение с данными потеряно, а затем восстановлено через некоторое время. Ранее мое приложение перестало работать, так как оно пыталось отправить данные без подключения, что вызвало исключение, которое было неправильно передано.

Я не знаю причины прерывистого соединения данных, но теперь я обрабатываю ситуацию, проверяя, есть ли соединение для передачи данных до отправки данных. В моем случае не имеет значения, не отправлены ли какие-либо данные. Если было важно избежать потери данных, я мог бы буферизовать данные и отправлять их после возвращения соединения.

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

 Смежные вопросы

  • Нет связанных вопросов^_^