2013-04-18 6 views
6

Ich verwendet prawnDelayed-Methode, um meine Aktivität zu aktualisieren, die funktioniert gut. Aber das Problem ist, dass selbst, wenn ich drücken Sie die Zurück-Taste postdelayed Methodenaufruf die vorherige Tätigkeit ..Wie töte ich eine PostDelayed-Methode in Android

// Handler für 30000 Milli Sekunden Post Verzögerung Erfrischung der Aktivität

mHandler.postDelayed(new Runnable() { 
public void run() { 
       dostuff(); 

     } 
      }, 30000); 
    } 

protected void dostuff() { 
Intent intent = getIntent(); 
finish();startActivity(intent); 
Toast.makeText(getApplicationContext(), "refreshed", Toast.LENGTH_LONG).show(); 
} 

public void onBackPressed() { 
     super.onBackPressed(); 
     finish(); 
     mHandler.removeCallbacks(null); 
     } 

protected void onStop() { 
      mHandler.removeCallbacks(null); 
     super.onStop(); 
    } 
+1

http://stackoverflow.com/q/16050807/931982 .. duplizieren deiner eigenen Frage .. Do not do – stinepike

Antwort

2

Eine Abhilfe für dieses ist:

Überprüfen Sie bei der dostuff() - Methode, ob Activity.isFinising() und do. Wenn es fertig ist, kehren Sie einfach zurück.

Wenn Sie zurück drücken, wird die Aktivität beendet und danach, wenn doStuff() ausgeführt wird, wird nichts unternommen.

1

mHandler.removeCallbacks (null) ;. Sie übergeben Null als Parameter. Übergeben Sie ein ausführbares Onject. Das sollte funktionieren.

public final void removeCallbacks (Runnable r) 

Verwenden Sie die oben genannten.

In API-Ebene 1 hinzugefügt Entfernen Sie ausstehende Posts von Runnable r, die sich in der Nachrichtenwarteschlange befinden.

http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29

Edit: Beispiel

Runnable runnable = new Runnable() { 
@Override 
public void run() { 
    // execute some code 
} 
}; 

Handler handler = new Handler(); 
handler.postDelayed(runnable, 10000); 
handler.removeCallbacks(runnable); 
+2

Es muss speziell die Instanz von 'Runnable' sein, die erstellt wurde. – dmon

+0

@dmon einverstanden Ich habe meine Antwort bearbeitet – Raghunandan

6

Sie diese nur verwenden, kann es hilfreich sein Sie

Runnable runobj=new Runnable() { 
public void run() 
{ 
dostuff(); 

} 
    }; 
mHandler.postDelayed(runobj, 30000); 
    } 
public void onBackPressed() 
{ 
super.onBackPressed(); 
mHandler.removeCallbacks(runobj); 
} 
Verwandte Themen