setBackgroundColor被忽略

时间:2018-06-28 10:27:26

标签: java android android-handler thread-sleep

   layout.setBackgroundColor(Color.GREEN);
    try {
        Thread.sleep(1250);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
   layout.setBackgroundColor(Color.BLUE);

我想首先将版式的BackgroundColor更改为绿色,并在等待1.25秒后应变为蓝色。 1.25秒后,BackgroundColor变为蓝色,但之前未变为绿色。我该如何解决?

3 个答案:

答案 0 :(得分:2)

您正在将主线程(UI线程)置于睡眠状态,这会导致问题。

尝试一下

layout.setBackgroundColor(Color.GREEN);
layout.postDelayed(new Runnable() {
    @Override
    public void run() {
        layout.setBackgroundColor(Color.BLUE);
    }
}, 1250);

确保将layout声明为final。

答案 1 :(得分:0)

您刚刚在上方两次更改了背景颜色。因此,仅将其视为您的最后一种蓝色颜色。

你必须做这样的事情。

layout.setBackgroundColor(Color.GREEN);

 Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() {
         @Override 
         public void run() { 
              layout.setBackgroundColor(Color.BLUE);
         } 
    }, 1250); 

答案 2 :(得分:0)

尝试像这样的处理程序:

layout.setBackgroundColor(Color.GREEN);
 Handler h=new Handler();
        h.postDelayed(new Runnable() {
            @Override
            public void run() {
                layout.setBackgroundColor(Color.BLUE);

            }
        },1250);

永远不要在UI线程上执行Thread.sleep()

那是最初导致问题的原因。

您可以用它来睡觉,例如。后台线程。

此处理程序解决方案具有两个优点

(1)避免了第二个线程的系统开销,

(2)在UI线程上运行,因此可以进行UI更改而不会引起异常。