2012-12-05 20 views
8

mam ten poniższy kod:Jak określić, czy zadanie timera została zakończona

Timer timer = new Timer();  
TimerTask task = new TimerTask() { 

    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
    } 
}; 

timer.schedule(task, 10000);//execute after 10 seconds 

możemy określić, czy zadanie jest już realizowane przez zegar lub nadal jest spowodowane?

Odpowiedz

5

Dodaj prostą zmienną jak ..

boolean isTaskCompleted = false; 
    Timer timer = new Timer();  
    TimerTask task = new TimerTask() { 

    @Override 
    public void run() { 
     // do stuff 
     isTaskCompleted = true; 
    } 
    }; 

    timer.schedule(task, 10000);//execute after 10 seconds 
+0

To jest dobry pomysł! Ale kiedy wywołuję to samo zadanie od wielu razy dla wielu celów. Jednak mam różne zmienne licznika czasu, aby anulować różne zadania. Jak mogę sprawdzić, czy zadanie odpowiadające zegarowi perykularnemu działa, czy nie. – Anand

3

Jasne,

class CustomTask extends TimerTask { 
    protected boolean isDone = false; 
    public boolean isDone() {return isDone; } 

    @Override 
     public void run() {} 
} 

CustomTask task = new CustomTask() { 
    @Override 
    public void run() { 
     isDone=true; 
    } 
}; 

EDIT: Jeżeli nie jesteś zadowolony z rozszerzenie klasy, można użyć metody scheduledExecutionTime(), to zwraca 0, jeśli zadanie nie zostało uruchomione.

http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html

+0

wiem o tym obejście .. Ale problem tutaj jest to, że nie można wywoływać funkcji Done() jawnie, chyba że przedłużysz TimerTask. Ale chciałem wiedzieć, czy jest jakiś api z TimerTask do tego .. – Pavan

+0

ok, mam ciebie, poprawiłem moją odpowiedź :) – JustDanyul

+0

dzięki .. ale android doc dla scheduleExecutionTime() mówi: Zadania, które jeszcze nie zostały uruchomione zwraca nieokreśloną wartość. http://developer.android.com/reference/java/util/TimerTask.html#scheduledExecutionTime() – Pavan