Java睡眠命令在睡眠之前会忽略命令

时间:2019-07-03 19:31:38

标签: java android

我在某个活动上有一个按钮,当我单击它时,我希望该按钮更改颜色,请稍等片刻,然后再次更改颜色。

我尝试了以下两种睡眠方式:

尝试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秒钟
  • 按钮的背景变为红色

按钮永远不会变为绿色;我在做什么错了?

谢谢

1 个答案:

答案 0 :(得分:1)

请勿阻止您的UI线程。请改用处理程序。

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

如果使用以下情况的处理程序,而该处理程序不会阻塞UI线程,则您应该能够看到颜色的变化。

在这里https://developer.android.com/guide/components/processes-and-threads.html

了解为什么不应该阻止UI线程
Test Student,10, 3
Test Student1,12, 1
Test Student2,5, 3
Test Student3,5, 4