簡體   English   中英

確保在Thread.sleep之后喚醒AsyncTask

[英]Assured wakeup of AsyncTask after Thread.sleep

我有一個前台服務,該服務在其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之后不喚醒任務。 那么在這里可以做什么?

即使設備處於睡眠狀態,您也可以強制打開CPU,請參見http://developer.android.com/training/scheduling/wakelock.html#cpu,如他們所說:

使用喚醒鎖的一種合理情況可能是后台服務,該服務需要獲取喚醒鎖以在屏幕關閉時保持CPU正常運行以進行工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM