如何清除UI线程队列

时间:2013-05-30 14:58:49

标签: android

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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)可以帮助您删除所有回调和消息。