我的 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/