2014-09-17 2 views
0

Я разрабатываю небольшое и очень простое приложение, где одно устройство Android отправляет небольшое сообщение по сети другому устройству Android. Android не позволит мне выполнять сетевые задачи в основном потоке, поэтому я использовал AsyncTask. Функциональные возможности следующие:Сетевые задачи с AsyncTask от Android приводят к очень разным задержкам

Когда кнопка нажата на Device1, создается и выполняется AsyncTask. ASyncTask отправляет сообщение «ping» с UDP на Device2. Устройство2 работает через некоторое время (true), и как только он получает сообщение «ping», он отправляет «понг». Устройство1 ожидает этого сообщения «понг».

Время измеряется с момента, когда устройство1 отправляет «пинг», пока не получит «понг». Если кнопка нажата несколько раз, латентность каждого пинг-понга резко падает до 2-5 мс, но у первого пинг-понга могут быть задержки от 60 до 350 мс. Если кнопка не нажимается некоторое время, а затем снова нажимается, типичная латентность также находится между 60-350 мс.

Есть ли кто-нибудь, кто может объяснить это поведение? Есть ли способ всегда достигать низких латентностей (~ 5 мс)?

Спасибо вам заранее!

ответ

0

Кажется, что Android отключает WiFi, когда нет трафика - см. Анализ и решение здесь: Force android to send UDP packets immediately?. В принципе, вам нужно время от времени отправлять пакет keep-alive (например, 100 мс).

+0

Большое спасибо. Это действительно проблема, но я бы никогда не нашел ее сам, я думаю ... Спасибо! – JavaDeveloper1976

+0

без проблем, теперь, если бы вы могли принять ответ, который был бы невероятным :) –

+0

Как это нормально? Извините, что я новичок на этом сайте :) – JavaDeveloper1976

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

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