У меня есть служба переднего плана, которая создает асинхронную задачу в onCreate(). Асинтаск имеет while(true)
в своем doInBackground. В этой функции он выполняет определенную сетевую операцию и переходит в спящий режим на случайный интервал после каждой итерации. Вот логика:
doInBackground(){
while(true){
//Do network operation
//randomNumber is a random number calculated each iteration and is in range of 60-180
Thread.sleep(randomoNumber*1000);
}
}
Теперь моя проблема заключается в том, что как только устройство переходит в спящий режим, оно также спит асинтаск. Работа сети очень важна для соблюдения временного интервала (randomNumber), и нельзя допустить, чтобы он спал больше, чем randomNumber секунд (хотя разница в несколько секунд может быть допустима). Итак, как я могу гарантировать, что асинхронная задача просыпается после Thread.sleep, даже если устройство не находится в активном состоянии? Я думаю, что могу использовать wakelock, но это может заставить задачу работать вечно, поскольку она имеет цикл while (true) и, следовательно, разряжает батарею. Если я использую его перед Thread.sleep и отпускаю после сетевой операции, снова может возникнуть та же проблема, когда задача не просыпается после thread.sleep. Итак, что здесь можно сделать?
AlarmManager
с бодрствующим намерением. - person 323go   schedule 21.05.2014