2014-04-14 41 views
0

我想讓我的UI線程運行一個ansycTask(例如獲取當前位置)如何重複任務直到某個時間或者直到收到答案?

但是,我想限制它的時間。你會建議這樣做嗎?

我想過觸發一個計時器,但我不知道如何。

另外,如果我想再說一遍,返回布爾值

一個的AsyncTask,我想給它3次重試機會。

我該如何執行此操作?

我考慮過檢查一個靜態標誌,表示已收到一個答案,但我不確定這是否正確。

回答

0

單程ScheduledThreadPoolExecutor。這將允許您在預定的時間運行線程。您可以使用方法scheduleWithFixedDelay在指定的時間運行您的任務。

通過執行Runnable來創建您的任務。使用Executor方法scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

executore將在您指定的時間後執行您的任務。在你的任務中,你可以檢查任務是否應該重試。一旦您的條件滿足或者您已達到重試次數,您可以取消該任務。您可以使用shutdown方法結束您的任務。

簡單的類來實現這一點:

class RetryTask implements Runnable { 
int retries = 3; 
@Override 
public void run() { 
    if(--retries == 0) { 
    //shutdown 
    } 
    if(location recieved) { 
    //shutdown 
    } 
    //else do your task 
} 
}