【问题标题】:setBackgroundColor is getting ignoredsetBackgroundColor 被忽略
【发布时间】:2018-06-28 10:27:25
【问题描述】:
layout.setBackgroundColor(Color.GREEN);
try {
Thread.sleep(1250);
} catch (InterruptedException e) {
e.printStackTrace();
}
layout.setBackgroundColor(Color.BLUE);
我想首先将布局的 BackgroundColor 更改为绿色,等待 1.25 秒后它应该变为蓝色。
BackgroundColor 在 1.25 秒后变为蓝色,但之前没有变为绿色。我该如何解决这个问题?
【问题讨论】:
标签:
java
android
android-handler
thread-sleep
【解决方案1】:
您正在将导致问题的主线程(UI 线程)置于睡眠状态。
试试这个
layout.setBackgroundColor(Color.GREEN);
layout.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
确保 layout 被声明为 final。
【解决方案2】:
您刚刚在上面两次更改了背景颜色。因此,它仅被视为您最后的 BLUE 颜色。
你必须这样做。
layout.setBackgroundColor(Color.GREEN);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
【解决方案3】:
尝试这样的处理程序:
layout.setBackgroundColor(Color.GREEN);
Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
},1250);
永远不要在 UI 线程上执行 Thread.sleep()。
这就是最初导致问题的原因。
你可以用它来睡觉,例如。后台线程。
这个 Handler 解决方案有两个优点:
(1) 避免第二个线程的系统开销,
(2) 在 UI 线程上运行,因此可以进行 UI 更改而不会导致异常。