Почему публикация и отмена исполняемого объекта в представлении и обработчике приводят к разным последствиям?

Я играл с Runnableи обнаружил, что если вы отправляете Delayeda 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);
6
задан Martyn 19 March 2012 в 11:23
поделиться