В чем смысл removeCallbacks (Runnable r) в обработчике в Android

Я хочу знать, каково точное значение removeCallbacks (Runnable r) в обработчике. Я просмотрел его документацию. и он просто говорит: «Удалите все ожидающие сообщения Runnable r, которые находятся в очереди сообщений».

Теперь мой вопрос: если мое сообщение уже было обработано моим обработчиком, и между ними, если я вызову removeCallbacks, прекратит ли он обработку моего наполовину завершенного сообщения? Или даже если я вызову removeCallbacks, будет выполнено сообщение, которое уже начало обрабатываться моим обработчиком (когда я вызываю post(Runnable r))?


person AndroDev    schedule 10.07.2012    source источник


Ответы (2)


Runnables должны выполняться только тогда, когда они выходят из очереди сообщений, поэтому, если ваше сообщение уже начало обрабатываться, это не должно вызываться вызовом removeCallbacks. Он должен быть уже удален, поэтому он продолжит обработку.

person Bill the Lizard    schedule 10.07.2012
comment
Привет, Билл... Еще одно... Если я использую асинхронную задачу и при запуске onPostExecute, а затем вызываю asynctask.cancel(true), в этом случае onPostExecute также будет отменен? - person AndroDev; 10.07.2012
comment
@AndroDev Я не знаю. Это должно быть опубликовано как отдельный вопрос. - person Bill the Lizard; 10.07.2012

Когда вы создаете новый Handler, он привязывается к потоку/очереди сообщений потока, который его создает. С этого момента он будет доставлять сообщения и исполняемые модули в эту очередь сообщений и выполнять их по мере их выхода из очереди сообщений. removeCallbacks просто удаляет из очереди те runnables, которые еще не начали обработку.

person Alex Lockwood    schedule 10.07.2012