Handler.removeCallbacks () не удаляет обратный вызов - почему? - PullRequest
1 голос
/ 13 августа 2011

Учитывая следующую трассировку LogCat, которая показывает, что Handler.removeCallbacks() вызывается (через MyListener.cancelTimeout()) ясно до myTask.run():

08-12 17:29:13.990: VERBOSE/MyListener.setTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:14.000: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/myTask.run(2625): TID: 2625, MyTimeoutTask(handleTimeout())
08-12 17:29:16.010: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/MyListener.handleTimeout(2625): TID: 2625

Что могло бы объяснить эту тайну?

Обратите внимание на точные временные метки в журнале: тот же точный объект Runnable (myTask @ 461cc378) используется для removeCallbacks () - ровно через 0,01 секунды после после postDelayed () , Затем, через 2,01 секунды, он запускается () ...

Что могло бы объяснить это?

Например, неужели 0,01 секунды слишком мало для Android, чтобы определить порядок?

Любые идеи по отладке этого очень приветствуются.

1 Ответ

5 голосов
/ 13 августа 2011

Это работает.Вы не дали никакого кода, который помог бы выяснить, что вы делаете неправильно, но вы делаете что-то неправильно: удаляете из неправильного обработчика, пропускаете неправильный исполняемый файл, что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...