我使用runOnUIThread
方法将Runnable
任务传递给主线程队列,但我需要清除之前发送的所有队列任务,然后再发送新任务。怎么做?
答案 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)
可以帮助您删除所有回调和消息。