gpt4 book ai didi

java - for 循环内的 Thread.sleep 导致循环体出现问题

转载 作者:行者123 更新时间:2023-12-01 18:37:48 24 4
gpt4 key购买 nike

因此,在下面发布的代码中,我有一个迭代 10 次的 for 循环,for 循环的目标是每 0.5 秒创建相同的 ImageView 10 次。当我测试这个时,它在 5 秒后同时添加了所有内容(假设因为它经历了循环并等待 500 毫秒再次经历它,500 毫秒 * 10 = 5 秒)。

问题是,为什么它在循环中等待 500 毫秒 10 次,然后在 for 循环中执行其余的所有操作。

我添加了一条 Log.i 打印消息来查看是否会同时打印,以及我的线程或 for 循环是否有问题,并且该消息每 500 毫秒打印一次。我不明白为什么它每 500 毫秒执行一次 Log.i 消息,但循环内的其余代码是在它位于相同的括号之后且在 Thread.sleep 方法之前完成的。

谢谢!代码:主要代码(错误在btnRoundsClick方法内)

    Variables var = new Variables();
EntityActions e = new EntityActions();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
final Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.firstmap);
FontTextView username = (FontTextView) findViewById(R.id.lblUsername);
username.setText("NAME");
RelativeLayout map1 = (RelativeLayout) findViewById(R.id.map1);
e.setMap(map1);
}

// On click of button, add enemies
public void btnRoundsClick(View view) {
ImageView firetower[] = new ImageView[10];
for (int c = 0; c < 10; c++) {
try
{
firetower[c] = new ImageView(Start.this);
firetower[c].setImageResource(R.drawable.firetower);
e.setEnemy(firetower[c]);
e.setStartEnd(0, 0, 0, 198);
e.addEnemy();
e.followPath();
Log.i("There is 1 ", "more ImageView");
Thread.sleep(500);
} catch (Exception e)
{
e.printStackTrace();
}
}
}

EntityActions 类 ImageView敌人; int 开始X、开始Y、结束X、结束Y; 相对布局图;

public EntityActions() {
startX = 0;
endX = 0;
startY = 0;
endY = 0;
}

public void setEnemy(ImageView enem) {
enemy = enem;
}

public void setMap(RelativeLayout m) {
map = m;
}

public void addEnemy() {
map.addView(enemy);
enemy.getLayoutParams().height = 60;
enemy.getLayoutParams().width = 60;
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)enemy.getLayoutParams();
head_params.setMargins(30, -20, 0, 0); //substitute parameters for left, top, right, bottom
enemy.setLayoutParams(head_params);
}

public void setStartEnd(int xS, int xE, int yS, int yE) {
startX = xS;
endX = xE;
startY = yS;
endY = yE;
}

public void followPath() {
TranslateAnimation animation = new TranslateAnimation(startX, endX, startY, endY);
animation.setDuration(6000);
animation.setFillAfter(true);
((View) enemy).startAnimation(animation);
}

如果我遗漏了任何内容或者您还有其他问题,请告诉我。

最佳答案

Thing is, why does it wait the 500ms 10 times in the loop THEN do the rest of everything in the for loop.

事实并非如此。它执行循环迭代,每 500 毫秒一次 - 然后您允许 UI 线程实际显示更新。在循环中添加一些日志记录,您将看到“每 500 毫秒迭代一次”行为。

基本上,您正在阻塞 UI 线程。不要这样做。

阅读Android Processes and Threads guide了解更多详细信息和替代方案。

关于java - for 循环内的 Thread.sleep 导致循环体出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138317/

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