1

Позвольте мне остановиться немного больше, например, если у меня есть этот код:Удаление отправленных сообщений в UI потоке

Этот объект создается основной поток пользовательского интерфейса:

Handler handler= new Handler(); 

Затем я использую:

handler.postDelayed(new Runnable(){ 
}1000); 

Мой вопрос: могу ли я отменить это действие, чтобы, если отправлено в очередь сообщений основного потока?

+0

Вы можете использовать методы removeCallback. – chRyNaN

+0

на том же самом объекте-обработчике? – yanozai

+0

Также как я могу идентифицировать runnables? – yanozai

ответ

0

Вы можете удалить ранее опубликованные Runnables, используя метод removeCallbacks() на обработчике, используемом для их публикации. Вам нужно будет указать точную ссылку на Runnable.

В своем коде вы публикуете Runnable, объявляя его анонимно встроенным. Если вы это сделаете, не сохраните ссылку на этот Runnable. Вместо этого вы можете сохранить ссылку на эту новую Runnable в переменной-члене или что-то, что не будет забыто к тому моменту, когда вы захотите ее удалить.

private Runnable r; // assign before use 
private Handler h; // assign before use 

private void schedule() { 
    h.postDelayed(r, 99999); 
} 

private void cancel() { 
    h.removeCallbacks(r); 
} 
+0

удивительный результат – yanozai

Смежные вопросы