gpt4 book ai didi

android - handler.removeCallbacks(runnable) 是否等同于 thred 的退出

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:28 28 4
gpt4 key购买 nike

假设我写:

Runnable runnable = new Runnable(){
@Override
public void run() {
Log.e(TAG, "runnable entered");
// working
Log.e(TAG, "runnable completed");
}
};

Thread t = new Thread(runnable);
t.start();

t.start(); 之后,我们将收到日志消息 runnable entered。在工作线程时,我总是希望我的可运行对象完成,完成后我的应用程序将不再在此线程上工作。即我应该总是得到这个日志 runnable completed;

现在假设我使用 Handler 而不是 Thread 类。

Handler handler = new Handler();
handler.post(runnable);

我能否确定 handler.removeCallbacks(runnable) 就像 runnable 已完成并且我的应用程序将不再在此 runnable 上运行?

最佳答案

handler.removeCallbacks(runnable) 从消息队列中移除挂起的 Runnables。但不会停止当前正在运行的 Runnable。例如假设你有一个 Runnable of A

class A implements Runnable {

public void run() {
handler.removeCallbacks(a);
Log.i("tag", "are start");
// Do work
Log.i("tag", "end");
}
}

A a = new A();

你调用

handler.post(a);

因此,当第一个可运行对象执行时,它将调用 removeCallbacks 方法。但是在 logcat 中你会看到输出将是

start

end

如果您不在run 方法中使用removeCallbacks,则输出将是

start

end

start

end

关于android - handler.removeCallbacks(runnable) 是否等同于 thred 的退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com