Я играл с Runnable
и обнаружил, что если вы postDelayed
Runnable
на View
, то удаление обратного вызова не сработает, однако, если вы сделаете то же самое, но опубликуете Runnable
на Handler
, тогда удаление обратного вызова сработает.
Почему это работает (код Runnable
run() никогда не выполняется):
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
где это не так (код 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);
removeCallbacks()
? - person CommonsWare   schedule 19.03.2012View.removeCallbacks()
всегда будетreturn true;
(по крайней мере, в ICS - остальные, вероятно, тоже) см. здесь - person zapl   schedule 19.03.2012