确保在Thread.sleep之后唤醒AsyncTask

时间:2014-05-21 03:54:06

标签: java android android-asynctask powermanager

我有一个前台服务,它在onCreate()中创建一个asynctask。 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秒更多的睡眠(尽管可以容忍几秒的差异)。那么我怎么能确保在Thread.sleep之后asynctask被唤醒,即使设备没有处于活动状态? 我想我可以使用唤醒锁,但这可能会使任务永远运行,因为它有一段时间(真实)循环,因此耗尽电池。如果我在Thread.sleep之前使用它并在网络操作之后释放它,那么同样的问题可能会发生在thread.sleep之后没有唤醒的任务。那么可以在这做什么呢?

1 个答案:

答案 0 :(得分:0)

即使设备处于休眠状态,您也可以强制启用CPU,如下所示http://developer.android.com/training/scheduling/wakelock.html#cpu

  

使用唤醒锁的一个合法案例可能是背景   需要获取唤醒锁以保持CPU运行的服务   屏幕关闭时工作