今天遇到一个很神奇的问题。
应用中有一个服务,服务中使用线程池 进行UDP的接收和发送。
但是,当锁屏后,数据无论如何都接收不到,当打开锁屏的时候,数据接收又恢复正常了。
并且,使用电源锁也没有任何效果。
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "xxxxx");
if(wl!=null) wl.acquire();
感到非常不解,于是查找网上的资料,发现
有些Android机型,在锁屏后,会休眠UDP(但是TCP不会被休眠)
究其原因,应该是锁屏后,某些Android设备为了省电,阻止了组播的接收,但没有阻止单播的接收,所以,锁屏后,UDP接收不到数据,而TCP可以接收到数据。