5

我使用runOnUIThread方法将Runnable任务传递给主线程队列,但我需要清除之前发送的所有队列任务,然后再发送新任务。怎么做?

4

3 回答 3

6

使用Handler发布。它具有与 runOnUiThread 相同的效果。在您的处理程序实例上,您可以调用removeCallbacks(null),这将删除处理程序队列中的 removeCallbacks(yourannableinstance)每个元素,或者删除所有yourannableinstance类型的元素

于 2013-05-30T15:03:53.167 回答
3

您可以使用该removeCallbacks(Runnable r)方法。如果他们是匿名的,那么您可以使用removeCallbacksAndMessages(null);. 如果这不能解决问题,请给我更多详细信息

于 2013-05-30T15:03:49.190 回答
1

UI 线程也是一个Looper线程,它只有一个 Message Queue.

因此,如果您在 UI 线程中创建一个处理程序,然后调用handler.post(runnable),则可运行任务将存储在消息队列中。

如果调用runOnUIThread(),运行任务也将存储在同一个消息队列中。

5289    public final void runOnUiThread(Runnable action) {
5290        if (Thread.currentThread() != mUiThread) {
5291            mHandler.post(action); // runOnUiThread also calls handler.post()
5292        } else {
5293            action.run();
5294        }
5295    }

mHandler.removeCallbacksAndMessages(null)会帮助您删除所有回调和消息。

于 2016-01-13T09:58:18.897 回答