我有一个前台服务,它在其 onCreate() 中创建一个异步任务。asynctask 在其 doInBackground 中有一个while(true)
。在这个函数中,它执行特定的网络操作,并在每次迭代后进入随机间隔休眠。这是逻辑:
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 秒的睡眠时间(尽管可以容忍几秒的差异)。那么我如何确保 asynctask 在 Thread.sleep 之后唤醒,即使设备不处于活动状态?我想我可以使用唤醒锁,但这可能会使任务永远运行,因为它有一个 while(true) 循环,因此会耗尽电池。如果我在 Thread.sleep 之前使用它并在网络操作之后释放它,则可能会再次出现在 thread.sleep 之后任务未唤醒的相同问题。那么这里可以做什么呢?