Правильная работа WAKE LOCK 2

У меня есть Сервис переднего плана, который запускает поток для фоновой работы.
В потоке прописано:

@Override
public void run() {
      PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
      PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"My WakeLock");
      wakeLock.acquire(); 
<...>
}

В манифесте permissiоn стоит.
Однако, при выключенном экране, приложение как засыпало, так и засыпает.
В чём дело?
На моём гаджите стоит андроид 11.

Так может не в правильности дело, а в том, что этот способ уже не помогает?
Тут вроде бы говорят, что Doze mode виноват. android - Keep alive a background thread using PARTIAL_WAKE_LOCK - Stack Overflow
Возможно еще зависит от производителя/модели.

Я бы попробовал найти комп, чтобы зарутить и поставить какой-нибудь чистый Андройд, там вроде как меньше проблем с убийством приложений если верить:

1 лайк

Я тоже так подумал.
Тем не менее, я проверил, что мой сервис переднего плана, при подключённом блоке питания к телефону, работает и в фоне, и при выключенном телефоне без тормозов и без убийства андроидом.
А поскольку, я хочу чтобы моим приложением могли пользоваться и другие, то этого мне вполне достаточно.

При неподключенном блоке питания, WAKE LOCK тоже работает. Но, моя ошибка была в том, что переменную wakeLock я не сделал глобальной: после wakeLock.acquire(); нужно чтобы это переменная не была уничтожена до wakeLock.release(); - https://stackoverflow.com/questions/2039555/how-to-get-an-android-wakelock-to-work ответ №1.:ok_hand: