He estado jugando alrededor con Runnable
s y han descubierto que si postDelayed
un Runnable
en un View
luego retirar la devolución de llamada no va a funcionar, sin embargo si lo hace lo mismo pero publicar la Runnable
en un Handler
luego retirar la devolución de llamada hace trabajo.¿Por qué publicar y cancelar un ejecutable en una vista y el controlador dan como resultado bahviour diferente?
¿Por qué este trabajo (Runnable
run() de código nunca se ejecutó):
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
en los que no ya que esto hace (Runnable
run() de código siempre es ejecutado) ?:
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);
¿Ha sido comprobar el valor de retorno de 'removeCallbacks()'? – CommonsWare
No había visto esto, ¿puede explicarme cómo puede ayudar esto? He leído la documentación, pero no veo cómo esto puede ayudar en mi ejemplo anterior. – Martyn
'View.removeCallbacks()' siempre 'devuelve true;' (al menos en ICS - también es probable que descanse) [ver aquí] (http://grepcode.com/file/repository.grepcode.com/java/ext/ com.google.android/android/4.0.3_r1/android/view/View.java#8786) – zapl