我想知道 TimerTask 如何与线程一起工作。
例如,我有一个执行 TimerTask 的代码,它有一个将在 UI 线程上运行的“运行”方法。
class looper extends TimerTask {
public looper() {
}
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
timer.schedule(new looper(), new Date(new Date().getTime() + 100));
}
});
}
}
计时器会像这样开始:
timer = new Timer();
timer.schedule(new looper(), new Date());
TimerTask 会创建一个新线程吗?如果是这样,将如何runOnUiThread
工作?它会将代码移动到 UI 线程吗?
我试图消除再次调用 TimerTask ( timer.schedule
) 的需要,并且只使用内部的无限循环run
进行计算 - 但这会阻塞 UI 线程并且应用程序不会响应。
PS - 我必须让代码在 UI 线程上运行,因为它必须更新 UI。
那么,这里发生了什么?