Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确保在Thread.sleep之后唤醒AsyncTask_Java_Android_Android Asynctask_Powermanager - Fatal编程技术网

Java 确保在Thread.sleep之后唤醒AsyncTask

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

我有一个前台服务,它在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在Thread.sleep之后唤醒,即使设备未处于活动状态?
我想我可以使用wakelock,但这可能会使任务永远运行,因为它有一个while(true)循环,因此会耗尽电池。如果我在Thread.sleep之前使用它,并在网络操作之后释放它,那么同样的问题也可能在Thread.sleep之后发生。那么,这里可以做些什么呢?

您可以强制CPU开启,即使设备处于休眠状态,请参见下面的说明:

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


正如我在问题中已经提到的,这会很快耗尽整个电池。使用
AlarmManager
进行唤醒。@323go我已经使用AlarmManager和PendingEvent每1分钟调用一次startService。我想如果AsyncTask进入睡眠状态,这也必须唤醒它。但它不是那样工作的。你不需要异步任务。当你使用wakeful时,只需启动一个新线程来进行网络事务。