让我详细说明一下,例如,如果我有以下代码:
该对象由主 UI 线程创建:
Handler handler= new Handler();
然后我使用:
handler.postDelayed(new Runnable(){
}, 1000);
我的问题是,我可以取消该操作,以便将其发布到主线程的消息队列吗?
您可以使用 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);
}
我是一名优秀的程序员,十分优秀!