Ho giocato in giro con Runnable
s e hanno scoperto che se si postDelayed
un Runnable
su un View
quindi rimuovendo il callback non funziona, se si fa lo stesso, ma pubblicare il Runnable
su un Handler
quindi rimuovendo il callback fa lavoro.Perché la pubblicazione e l'annullamento di una persona eseguibile su una vista e un gestore risultano in un altro bahviour?
Perché questo lavoro (codice Runnable
run() non viene mai eseguito):
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
dove non come questo non fa (sempre viene eseguito il codice Runnable
run()) ?:
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
View view = findViewById(R.id.some_view);
view.postDelayed(runnable, 10000);
view.removeCallbacks(runnable);
Sei stato controllando il valore restituito da 'removeCallbacks()'? – CommonsWare
Non l'avevo visto, puoi spiegare come può essere d'aiuto? Ho letto la documentazione ma non vedo come questo possa essere d'aiuto nel mio esempio precedente. – Martyn
'View.removeCallbacks()' restituirà sempre true; '(almeno su ICS - probabilmente anche il resto) [vedere qui] (http://grepcode.com/file/repository.grepcode.com/java/ext/ com.google.android/android/4.0.3_r1/android/view/View.java#8786) – zapl