【问题标题】:Deleting sent messages in UI thread在 UI 线程中删除已发送的消息
【发布时间】:2016-06-23 06:00:59
【问题描述】:

如果我有这个代码,让我再详细说明一下:

此对象由主 UI 线程创建:

Handler handler= new Handler();

然后我使用:

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

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

【问题讨论】:

  • 你可以使用 removeCallback 方法。
  • 在同一个处理程序对象上?
  • 另外我怎样才能识别runnables?

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


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2021-03-06
    • 1970-01-01
    相关资源
    最近更新 更多