gpt4 book ai didi

Java sleep 命令忽略 sleep 之前的命令

转载 作者:行者123 更新时间:2023-12-02 09:43:20 27 4
gpt4 key购买 nike

我的 Activity 上有一个按钮,当我单击它时,我希望按钮改变颜色,等待一段时间,然后再次改变颜色。

我尝试过以下两个版本的 sleep :

尝试1:

public void buClick(View view) {
Button buCard = (Button) view;
buCard.setBackgroundColor(Color.GREEN);

TimeUnit time = TimeUnit.SECONDS;
try {
time.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}

buCard.setBackgroundColor(Color.RED);
}

尝试2:

public void buClick(View view) {
Button buCard = (Button) view;
buCard.setBackgroundColor(Color.GREEN);

try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}

buCard.setBackgroundColor(Color.RED);
}

两种方法的结果是相同的:

  • 按钮被点击
  • 按钮的背景保持默认
  • 应用程序等待 2 秒
  • 按钮的背景变为红色

按钮在任何时候都不会变成绿色;我做错了什么?

谢谢

最佳答案

不要阻塞您的 UI 线程。请改用处理程序。

如果您尝试阻止主线程,整个 UI 线程将停止,导致您的应用程序卡住,一旦您的 sleep 结束,您将调用 setBackgroundColor(Color.RED)。并且应用了红色,这就是为什么您看不到绿色的变化。

如果您使用像下面这样的处理程序,它不会阻塞 UI 线程,您应该能够看到颜色变化。

在此处了解为什么不应阻止 UI 线程 https://developer.android.com/guide/components/processes-and-threads.html

    Button buCard = (Button) view;

buCard.setBackgroundColor(Color.GREEN);

Handler handler = new Handler();
Runnable r=new Runnable() {
public void run() {
buCard.setBackgroundColor(Color.RED);
}
};
handler.postDelayed(r, 2000);

关于Java sleep 命令忽略 sleep 之前的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876836/

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