0

我有一个前台服务,它在其 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 之后任务未唤醒的相同问题。那么这里可以做什么呢?

4

1 回答 1

0

即使设备处于睡眠状态,您也可以强制 CPU 开启,如他们所说,请参见此处http://developer.android.com/training/scheduling/wakelock.html#cpu :

使用唤醒锁的一个合理案例可能是后台服务需要获取唤醒锁以在屏幕关闭时保持 CPU 运行以完成工作

于 2014-05-21T04:25:12.660 回答