Android WifiLock no funciona?

Necesito extraer datos de un servidor en la red local cada x minutos a través de WiFi y HTTP. Se está ejecutando un servicio en segundo plano y uso un AlarmManager para activar la consulta. La política de suspensión de WiFi está configurada en "nunca" en el dispositivo.

El problema es que el dispositivo se pone en suspensión cuando la pantalla está apagada y el bloqueo de wifi no parece volver a conectar correctamente el wifi, por lo que la consulta falla.

¿Alguna idea de lo que está mal aquí?

Ejecución

   {...}

    wakeLockUtil.lock();

    //wait for wifi to connect (no idea if this is useful)
    Thread.sleep(3000);

    doQuery();

    wakeLockUtil.unlock();

   {...}

WakeLock

public WakeLockUtil(Context context) {

    wifiLock = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL,
            "PeriodUpdateWifiLock");
    wakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
            "PeriodUpdateWakeLock");

}

public void lock() {
    System.out.println("WakeLockUtil.lock()");
    try {
        wakeLock.acquire();
        wifiLock.acquire();
    } catch (Exception e) {
        Log.e(this.getClass().getSimpleName(), "Error getting Lock: " + e.getMessage());
    }

}

public void unlock() {
    System.out.println("WakeLockUtil.unlock()");
    if (wakeLock.isHeld())
        wakeLock.release();
    if (wifiLock.isHeld())
        wifiLock.release();
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta