2013-08-21 4 views
22

Ich möchte nach 5 Sekunden immer wieder eine Methode aufrufen und wann immer ich den wiederholten Aufruf der Methode stoppen möchte kann ich den wiederholten Aufruf der Methode anhalten oder neu starten.Wie wiederhole ich eine Aufgabe nach einer bestimmten Zeit in Android?

Hier ist ein Beispielcode, den ich wirklich implementieren möchte. Bitte helfen Sie mir in dieser Hinsicht, ich wäre Ihnen sehr dankbar.

private int m_interval = 5000; // 5 seconds by default, can be changed later 
private Handler m_handler; 

@Override 
protected void onCreate(Bundle bundle) 
{ 
    ... 
    m_handler = new Handler(); 
} 

Runnable m_statusChecker = new Runnable() 
{ 
    @Override 
    public void run() { 
      updateStatus(); //this function can change value of m_interval. 
      m_handler.postDelayed(m_statusChecker, m_interval); 
    } 
}; 

public void startRepeatingTask() 
{ 
    m_statusChecker.run(); 
} 

public void stopRepeatingTask() 
{ 
    m_handler.removeCallbacks(m_statusChecker); 
} 
+0

Versuchen Sie, diese http://stackoverflow.com/a/14377875/28557 und http://mobile.tutsplus.com/tutorials/android/android-fundamentals-scheduling-recurring-tasks/ –

+0

ich seine leicht denken Verwenden Sie CountDownTimer. Sehen Sie hier für Tutorial http://androidsolution4u.blogspot.in/2012/12/android-count-down-timer.html –

Antwort

57

Sets wiederholt Aufgabe dies mit:

//Declare the timer 
Timer t = new Timer(); 
//Set the schedule function and rate 
t.scheduleAtFixedRate(new TimerTask() { 

    @Override 
    public void run() { 
     //Called each time when 1000 milliseconds (1 second) (the period parameter) 
    } 

}, 
//Set how long before to start calling the TimerTask (in milliseconds) 
0, 
//Set the amount of time between each execution (in milliseconds) 
1000); 

und wenn Sie die Aufgabe einfach anrufen t.cancel() hier t ist Ihr Timer Objekt

und Sie können auch überprüfen, Kommentar stornieren wollen unter Ihrem Antwort haben sie kurze Informationen darüber gegeben.

+0

Nach der ersten Iteration bekomme ich "Aus falscher Thread-Ausnahme aufgerufen" – fix

+1

Für Android ist ein Handler einem Timer vorzuziehen: https://stackoverflow.com/questions/20330355/mertertask-or-handler – Suragch

4

Verwendung Timertask nach bestimmten Zeitintervall zu nennen

Timer timer = new Timer(); 
    timer.schedule(new UpdateTimeTask(),1, TimeInterval); 

und

class UpdateTimeTask extends TimerTask { 

     public void run() 
      {   
      // do stufff 
      } 

     } 
6

eine Handler im onCreate() Methode verwenden. Seine postDelayed() Methode bewirkt, dass die Runnable zur Nachrichtenwarteschlange hinzugefügt wird und nach Ablauf der angegebenen Zeitspanne ausgeführt wird (das ist in dem Beispiel 0). Dann reiht sich dieses nach einer festen Zeit (in diesem Beispiel 1000 Millisekunden) in die Warteschlange ein.

Siehe diesen Code:

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    android.os.Handler customHandler = new android.os.Handler(); 
    customHandler.postDelayed(updateTimerThread, 0); 
} 

private Runnable updateTimerThread = new Runnable() 
{ 
    public void run() 
    { 
     //write here whaterver you want to repeat 
     customHandler.postDelayed(this, 1000); 
    } 
}; 
0

es in mit Hilfe von Handler Weg Android tun.

Deklarieren Sie einen Handler, die does not leak Memory

/** 
    * Instances of static inner classes do not hold an implicit 
    * reference to their outer class. 
    */ 
    private static class NonLeakyHandler extends Handler { 
     private final WeakReference<FlashActivity> mActivity; 

     public NonLeakyHandler(FlashActivity activity) { 
      mActivity = new WeakReference<FlashActivity>(activity); 
     } 

     @Override 
     public void handleMessage(Message msg) { 
      FlashActivity activity = mActivity.get(); 
      if (activity != null) { 
       // ... 
      } 
     } 
    } 

ein lauffähiges erklären, die Ihre Aufgabe

//Task Handler 
private Handler taskHandler = new NonLeakyHandler(FlashActivity.this); 

Aufgabe wiederholen, nachdem fix Zeit

private Runnable repeatativeTaskRunnable = new Runnable() { 
     public void run() { 
      new Handler(getMainLooper()).post(new Runnable() { 
       @Override 
       public void run() { 

     //DO YOUR THINGS 
     } 
    }; 

initialisieren Handler-Objekt in Ihrer Aktivität/Fragment

Griff Intervall

taskHandler.postDelayed (repeatativeTaskRunnable, DELAY_MILLIS);

Stopp Wiederholung

taskHandler .removeCallbacks (repeatativeTaskRunnable);

Verwandte Themen