У меня есть рабочий поток, который запускается при запуске действия. Он обновляет элементы пользовательского интерфейса, когда экран включен, вызывая обратный вызов. Теперь, когда приложение находится в фоновом режиме, рабочий поток должен продолжать работать.Поток проходит спорадически, когда экран выключен
Однако нить становится неуклюжей после выключения экрана. Когда экран включен, поток выполняет свой рабочий цикл довольно точно, но это не тот случай, когда экран выключен.
отладки часть я использую для потока работоспособной выглядит примерно так:
@Override
public void run()
{
while(mRunning)
{
Log.i(TAG, "Tick");
try
{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
mRunning = false;
}
}
}
Когда я запускаю это в то время как экран включен, выход LogCat является довольно последовательным:
11-21 15:15:18.022 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:15:19.031 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:15:20.030 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:15:21.031 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:15:22.037 1424-2260/com.manabreak.threadedtest I/Worker: Tick
Как вы можете видеть, это довольно точно и остается там около 1000 мс. Однако, когда экран выключен, выход становится действительно случайным:
11-21 15:16:22.002 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:16:28.781 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:16:29.646 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:16:33.619 1424-2260/com.manabreak.threadedtest I/Worker: Tick
11-21 15:16:38.497 1424-2260/com.manabreak.threadedtest I/Worker: Tick
Это намного более спорадический. Сначала он спит почти семь секунд, затем цикл в 900 мс, затем снова четыре секунды ... Как сохранить поток «более плавным»? Работник должен работать довольно аккуратно и своевременно.
Возможно, вам следует рассмотреть возможность сделать это в службу вместо Тема. Он лучше подходит для платформы Android. –