在UI线程中删除已发送的消息

时间:2016-03-09 02:27:49

标签: java android multithreading android-asynctask thread-safety

如果我有这段代码,请举例说明一下:

此对象由主UI线程创建:

Handler handler= new Handler();

然后我用:

handler.postDelayed(new Runnable(){
}1000);

我的问题是,我是否可以取消该操作,以便发布到主线程的消息队列?

1 个答案:

答案 0 :(得分:0)

您可以使用用于发布它们的处理程序上的removeCallbacks()方法删除以前发布的Runnables。您需要对发布的Runnable提供完全引用。

在您的代码中,您发布Runnable,同时匿名声明内联。如果您这样做,将不会保留对该Runnable的引用。相反,您可以将对新Runnable的引用存储在成员变量中,或者在您想要删除它时不会忘记的内容。

private Runnable r;  // assign before use
private Handler h;   // assign before use

private void schedule() {
    h.postDelayed(r, 99999);
}

private void cancel() {
    h.removeCallbacks(r);
}