전경 서비스가있어 onCreate()에 asynctask를 만듭니다. asynctask의 doInBackground에 while(true)
이 있습니다. 이 기능에서는 특정 네트워크 작동을 수행하고 각 반복 후에 임의의 간격으로 절전 모드로 전환됩니다. Thread.sleep 이후의 AsyncTask 보장 된 깨우기
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 초 (몇 초의 차이는 용인 할 수 있음) 이상으로자는 것은 감당할 수 없습니다. 그렇다면 장치가 활성 상태가 아닌데도 asynctask가 Thread.sleep 이후에 깨어나는 것을 어떻게 확신 할 수 있습니까? 내가 wakelock을 사용할 수 있다고 생각하지만, 잠시 (참) 루프가있어 배터리를 소모하기 때문에 작업을 영원히 계속 실행할 수 있습니다. Thread.sleep 전에 사용하고 네트워크 작업 후에 해제하면 다시 thread.sleep 이후에 깨어나지 않는 동일한 문제가 발생할 수 있습니다. 그러면 여기서 무엇을 할 수 있습니까?
깨어있는 의도로 'AlarmManager'를 사용하십시오. – 323go
@ 323go 저는 이미 1 분마다 startService를 호출하기 위해 PendingIntent와 함께 AlarmManager를 사용하고 있습니다. 나는 이것이 잠들었다면 AsyncTask를 깨워야 만한다고 생각한다. 그러나 그것은 그렇게 작동하지 않습니다. – rahulserver
AsyncTask가 필요하지 않습니다. 깨운 의도를 만들 때 네트워크 트랜잭션을 수행하기 위해 신선한 스레드를 시작하십시오. – 323go