Служба Android с TimerTask и WakeLock приостанавливает свою работу, когда экран выключенAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Служба Android с TimerTask и WakeLock приостанавливает свою работу, когда экран выключен

Сообщение Anonymous »

Привет всем разработчикам Android!
Я хочу задать вопрос о чем-то, что сводит меня с ума в течение последних нескольких недель, и я не могу заставить его работать должным образом.
У меня есть приложение для Android, которое запускает службу, в которой есть цикл, который запускается каждые несколько секунд и должен работать бесконечно и никогда не останавливаться, даже если экран выключен. эта служба будет работать независимо от того, открыт ли пользовательский интерфейс приложения или нет. он запускается, даже если стек задач был очищен.
Я реализовал все это, используя сервис и TimerTask внутри класса сервиса, вот так:

Код: Выделить всё

            Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
//Do something that will run again and again every time that the timer is called. every 10 seconds.
}
};
timer.schedule(timerTask, 1000, 10000);
Я добавил WakeLock внутри этого цикла (и я также пытался запустить WakeLock только один раз вне цикла):

Код: Выделить всё

 PowerManager mgr = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myapp:MyWakeLock1234");
if (!wakeLock.isHeld()) {
wakeLock.acquire();
Log.d("WAKEWAKE", "WAKELOCK ACQUIRED NOW...");
}
Я никогда не отпускаю WakeLock, потому что цикл службы работает бесконечно даже при выключенном экране.
Внутри цикла таймера я также добавил звук MediaPlayer, который будет издавать звуковой сигнал каждые несколько секунд (в целях тестирования — я намерен удалить его, если все работает нормально):

Код: Выделить всё

MediaPlayer mp = MediaPlayer.create(MyService2.this, R.raw.beepbeep);
mp.setOnCompletionListener(MediaPlayer::release);
mp.start();
Сама служба работает нормально, и я также настроил приложение на перезагрузку службы после загрузки, и оно тоже работает нормально.
Единственная проблема, с которой я сталкиваюсь, это ПОСЛЕ того, как я выключаю экран телефона с помощью кнопки питания или когда экран выключается при любых обстоятельствах, а затем таймер продолжает работать, и звуковой сигнал продолжает звучать каждые 10 секунд, а затем... ОСТАНОВЛЯЕТСЯ!
Он может остановиться на несколько минут, может остановиться на 20 минут, он возобновит звуковой сигнал, когда экран выключен (WakeLock), после этого 1 или более раз и СНОВА. Останавливается еще на N минут.
Как только я открываю дисплей телефона, чтобы выйти из режима блокировки, цикл волшебным образом возобновляет работу каждые 10 секунд и хорошо подает звуковой сигнал, как будто проблем нет!
Я все перепробовал! Пробовал убрать гудки MediaPlayer, пробовал запускать WakeLock только один раз и не в цикле, пытался сделать паршивый цикл вместо использования TimerTask. Все работает хорошо, пока экран не выключится! Похоже, что моя служба переходит в какой-то спящий режим или приостанавливается.
Я даже пытался загрузить фрагмент кода с GitHub, который утверждает, что работает хорошо, но он останавливается/приостанавливается точно так же!
Я должен отметить, что TimeTask на данный момент ПУСТОЙ и ничего не запускает, кроме кода WakeLock и звукового сигнала MediaPlayer. Нет связи, нет ничего!
Что я могу сделать, чтобы решить эту проблему?
Спасибо за ваши добрые ответы! Я ценю это!

Подробнее здесь: https://stackoverflow.com/questions/693 ... creen-is-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»