Я хочу задать вопрос о чем-то, что сводит меня с ума в течение последних нескольких недель, и я не могу заставить его работать должным образом.
У меня есть приложение для 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);
Код: Выделить всё
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...");
}
Внутри цикла таймера я также добавил звук 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
Мобильная версия