我使用runOnUIThread
方法将Runnable
任务传递给主线程队列,但我需要清除之前发送的所有队列任务,然后再发送新任务。怎么做?
问问题
4190 次
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 回答