Елевферий
(Елевферий)
10.Май.2022 13:07:40
#1
У меня есть Сервис переднего плана, который запускает поток для фоновой работы.
В потоке прописано:
@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.
AlexP
(Alex P.)
13.Май.2022 18:04:07
#2
Так может не в правильности дело, а в том, что этот способ уже не помогает?
Тут вроде бы говорят, что Doze mode виноват. android - Keep alive a background thread using PARTIAL_WAKE_LOCK - Stack Overflow
Возможно еще зависит от производителя/модели.
Я бы попробовал найти комп, чтобы зарутить и поставить какой-нибудь чистый Андройд, там вроде как меньше проблем с убийством приложений если верить:
1 лайк
Елевферий
(Елевферий)
13.Май.2022 18:32:56
#3
Я тоже так подумал.
Тем не менее, я проверил, что мой сервис переднего плана, при подключённом блоке питания к телефону, работает и в фоне, и при выключенном телефоне без тормозов и без убийства андроидом.
А поскольку, я хочу чтобы моим приложением могли пользоваться и другие, то этого мне вполне достаточно.
Елевферий
(Елевферий)
25.Май.2022 07:37:41
#4
При неподключенном блоке питания, WAKE LOCK тоже работает. Но, моя ошибка была в том, что переменную wakeLock я не сделал глобальной: после wakeLock.acquire();
нужно чтобы это переменная не была уничтожена до wakeLock.release();
- https://stackoverflow.com/questions/2039555/how-to-get-an-android-wakelock-to-work ответ №1.