我实现了 STUN 客户端,它在指定的时间段内向 STUN 服务器发送请求,并在此期间监听来自 STUN 服务器的请求:
try {
byte[] respData = new byte[1024];
DatagramPacket bRespPacket = new DatagramPacket(respData, respData.length);
datagramSocket.setSoTimeout(timeout);
datagramSocket.receive(bRespPacket);
processReceivedData(bRespPacket.getData());
} catch (Exception e){}
如果设备进入待机模式(屏幕关闭时),程序执行将冻结在 datagramSocket.receive() 上,并且在屏幕解锁之前不会抛出 SocketTimeoutException。当屏幕解锁时,成功抛出 SocketTimeoutException 并继续执行程序。这种行为的原因是什么?
UPD: 如果设备空闲程序执行在 datagramSocket.receive 方法上冻结并且没有接收任何传入数据。我尝试使用 WifiLock 但没有结果。
UPD 2: 如果我使用 WakeLock 一切正常,但我想这不是一个好方法