2014-05-21 5 views
0

전경 서비스가있어 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 이후에 깨어나지 않는 동일한 문제가 발생할 수 있습니다. 그러면 여기서 무엇을 할 수 있습니까?

+0

깨어있는 의도로 'AlarmManager'를 사용하십시오. – 323go

+0

@ 323go 저는 이미 1 분마다 startService를 호출하기 위해 PendingIntent와 함께 AlarmManager를 사용하고 있습니다. 나는 이것이 잠들었다면 AsyncTask를 깨워야 만한다고 생각한다. 그러나 그것은 그렇게 작동하지 않습니다. – rahulserver

+0

AsyncTask가 필요하지 않습니다. 깨운 의도를 만들 때 네트워크 트랜잭션을 수행하기 위해 신선한 스레드를 시작하십시오. – 323go

답변

0

당신은 장치가 그들이 말하는 여기 http://developer.android.com/training/scheduling/wakelock.html#cpu를 참조자는 경우에도에있을 CPU를 강제로 수 :

웨이크를 잡기 위해 필요한 배경 서비스가 될 수있는 웨이크 잠금을 사용하는 한 합법적 인 경우 화면이 꺼져있을 때 CPU가 계속 실행되도록하려면 이 작동합니다.

+0

내가 이미 내 질문에 언급했듯이, 그것은 전체 배터리를 빠르게 소모시킵니다. – rahulserver