Я играл примерно с Runnable
с и обнаружил, что если вы postDelayed
Runnable
на View
с последующим удалением обратного вызова не будут работать, однако, если вы делаете то же самое, но выкладывают Runnable
на Handler
с последующим удалением обратного вызов делает Работа.Почему публикация и аннулирование запуска в представлении View и Handler в разных версиях bahviour?
Почему это работает (код Runnable
запуска() никогда не запускается на выполнение):
Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);
где, как это не (Runnable
запуска (код) всегда запускается на выполнение) ?:
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()'? – CommonsWare
Я этого не видел, не могли бы вы объяснить, как это может помочь? Я прочитал документацию, но не вижу, как это может помочь в моем примере выше. – Martyn
'View.removeCallbacks()' всегда будет возвращать true; '(по крайней мере, на ICS-rest, вероятно, тоже) [см. Здесь] (http://grepcode.com/file/repository.grepcode.com/java/ext/ com.google.android/android/4.0.3_r1/android/view/View.java#8786) – zapl