如果我有这段代码,请举例说明一下:
此对象由主UI线程创建:
Handler handler= new Handler();
然后我用:
handler.postDelayed(new Runnable(){
}1000);
我的问题是,我是否可以取消该操作,以便发布到主线程的消息队列?
答案 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);
}