我想在5秒内每隔1ms运行一次方法。现在我在用
long t = System.currentTimeMillis();
long end = t + 5000;
while (System.currentTimeMillis() < end) {
// do something
// pause to avoid churning
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}这段代码的问题在于它在5秒的时间内冻结了UI。我不感兴趣。是否可以使用可运行或处理程序,然后在5秒后终止?致以问候!
发布于 2022-02-23 13:20:12
您可以递归地使用Handler#postDelayed:
private void doTask(long endTimeMillis) {
// do something
long now = System.currentTimeMillis();
if (now < endTimeMillis) {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
doTask(endTimeMillis);
}, 1L);
}
}https://stackoverflow.com/questions/71237295
复制相似问题