Java 确保在Thread.sleep之后唤醒AsyncTask
我有一个前台服务,它在onCreate()中创建一个asynctask。 asynctask的doInBackground中有一个Java 确保在Thread.sleep之后唤醒AsyncTask,java,android,android-asynctask,powermanager,Java,Android,Android Asynctask,Powermanager,我有一个前台服务,它在onCreate()中创建一个asynctask。 asynctask的doInBackground中有一个while(true)。在该函数中,它执行特定的网络操作,并在每次迭代后随机休眠一段时间。逻辑如下: doInBackground(){ while(true){ //Do network operation //randomNumber is a random number calculated each iterati
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在Thread.sleep之后唤醒,即使设备未处于活动状态?
我想我可以使用wakelock,但这可能会使任务永远运行,因为它有一个while(true)循环,因此会耗尽电池。如果我在Thread.sleep之前使用它,并在网络操作之后释放它,那么同样的问题也可能在Thread.sleep之后发生。那么,这里可以做些什么呢?您可以强制CPU开启,即使设备处于休眠状态,请参见下面的说明: 使用唤醒锁的一个合法案例可能是背景 需要获取唤醒锁以保持CPU运行的服务 在屏幕关闭时工作
正如我在问题中已经提到的,这会很快耗尽整个电池。使用
AlarmManager
进行唤醒。@323go我已经使用AlarmManager和PendingEvent每1分钟调用一次startService。我想如果AsyncTask进入睡眠状态,这也必须唤醒它。但它不是那样工作的。你不需要异步任务。当你使用wakeful时,只需启动一个新线程来进行网络事务。