在 UI 线程中删除已发送的消息
Posted
技术标签:
【中文标题】在 UI 线程中删除已发送的消息【英文标题】:Deleting sent messages in UI thread 【发布时间】:2016-06-23 06:00:59 【问题描述】:如果我有这个代码,让我再详细说明一下:
此对象由主 UI 线程创建:
Handler handler= new Handler();
然后我使用:
handler.postDelayed(new Runnable()
, 1000);
我的问题是,如果发布到主线程的消息队列,我可以取消该操作吗?
【问题讨论】:
你可以使用 removeCallback 方法。 在同一个处理程序对象上? 另外我怎样才能识别runnables? 【参考方案1】:您可以使用用于发布它们的 Handler 上的 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);
【讨论】:
以上是关于在 UI 线程中删除已发送的消息的主要内容,如果未能解决你的问题,请参考以下文章