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 の後にタスクが起きないという同じ問題が発生する可能性があります。では、ここで何ができるでしょうか?