Для безопасной энергии Android выключает компоненты, если экран выключается.Я предполагаю, что это как-то останавливает выполнение вашего кода.Может быть, ваша розетка нарушается, когда Android выключает WiFi.
В качестве быстрого обходного пути вы можете попробовать использовать блокировку Wi-Fi, чтобы предотвратить подобное поведение Android.Если это решит вашу проблему, вам следует рассмотреть возможность ее реализации другим способом без блокировки WiFi, т.е. проверьте подключение устройства и заново создайте сокет, если он изменился.
http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
РЕДАКТИРОВАТЬ:
Он попробовал это сам и сделал небольшой пример.В результате у меня не возникло проблем с получением пакетов UDP даже при выключенном экране и ожидании пары минут.Я играю звук при получении, и с выключенным экраном воспроизведение стало немного прерывистым, что доказывает, что телефон находился в режиме ожидания.
Я просто запустил сокет в новом потоке прямо из активности и ждал там сокета. Получите.Ничего особенного в этом нет:
DatagramSocket socket = new DatagramSocket(port);
byte[] buf = new byte[256];
while(true) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// doing something with the data...
setOutputText(new String(buf));
}
Я тестировал его на Galaxy Nexus.Может быть, вы можете предоставить более подробную информацию о вашей проблеме?