java - 循环内的 Android Studio 延迟
问题描述
我想制作一个循环,用户想要的时间但延迟 3 秒。
这是代码:
for (i = 0;i < n1; i++){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show(); ActionIwantToDo();
}
},3000);
}
变量 i是用户设置的变量。问题是吐司不是每 3 秒出现一次,它就像一个正常的循环一样没有延迟。我认为这是因为吐司的时间,但如果我将时间设置为 20 秒仍然是一样的。有人知道如何在循环中进行适当的延迟???
解决方案
您遇到的问题是您的循环一次创建许多处理程序,延迟 3 秒,然后显示敬酒。它们不会互相等待,因为它们是在彼此相隔几毫秒内创建的,所以它们会同时显示 toast。
我不确定您要完成什么,并且循环可能不是您想要的。然而,这是一种在 3 秒后和每 3 秒后多次显示吐司的方法。
为此,我们将使用递归,因为它会使您不会被主线程阻塞。
- 从您需要函数开始的地方调用 doSomething (递归函数)(请记住,第二个变量是您希望它运行的次数,而 0 只是需要作为计数器)
doSomething(0, 3)
- 创建做某事
private void doSomething(int i, int n) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (i < n) {
Toast.makeText(KeyMapCreator.this, "Try number " + i,Toast.LENGTH_SHORT).show();
actionIWantToDo();
doSomething(i+1, n);
}
}
}, 3000);
}
推荐阅读
- r - 删除数据框中方差最小的列。(右)
- reactjs - 使用 Docker 代理对 Flask 应用程序的 React 请求
- javascript - 无法读取未定义错误的属性“发送”
- reactjs - React/JS 使用 useEffect 改变状态
- python - 使用 json.load 不断导致错误
- sql - 如何创建特定的 SQL Server 存储过程?
- scala - 如果使用scala的原始日志文件如何读取flink中的文件?
- measurement - 是否有任何评估代码质量的标准?
- javascript - 排序不适用于 resourceTimeGridPlugin fullcalender 中的资源
- c++ - 错误:未定义模板 'llvm::yaml::MissingTrait 的隐式实例化