繁体   English   中英

确保在Thread.sleep之后唤醒AsyncTask

[英]Assured wakeup of AsyncTask after Thread.sleep

我有一个前台服务,该服务在其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);
     }

}

现在我的问题是,设备进入睡眠状态后,它也会同时睡眠asynctask。 网络操作对于坚持时间间隔(randomNumber)至关重要,因此不能保证其休眠时间超过randomNumber秒(尽管可以容忍几秒钟的差异)。 那么,即使设备未处于活动状态,如何确保Thread.sleep之后asynctask也会唤醒? 我认为我可以使用唤醒锁,但是由于它具有while(true)循环,因此可以使任务永远运行,从而耗尽电池电量。 如果我在Thread.sleep之前使用它,并在网络操作之后释放它,则可能再次出现相同的问题,即在thread.sleep之后不唤醒任务。 那么在这里可以做什么?

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

使用唤醒锁的一种合理情况可能是后台服务,该服务需要获取唤醒锁以在屏幕关闭时保持CPU正常运行以进行工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM