Android:睡眠不适用于UI更改

时间:2014-09-18 21:58:17

标签: android sleep

我正在制作简单的测验应用,现在等待时出现问题。 当用户单击四个可能答案中的一个时,它应该变为橙色,并在两秒后变为红色或绿色(正确或错误的答案)。这是我的代码的一部分:

public void clickButton(View v) {
    changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
    try {
        //Thread.sleep(2000);
        TimeUnit.SECONDS.sleep(2);
    } catch ( InterruptedException r ) {}

    changeButton(v, getResources().getDrawable(R.drawable.btn_red));
}   

我试过线程睡眠或时间单位睡眠,但在这两种情况下,按钮都变为默认白色"点击"相位和两秒后红色 - 完全跳过橙色部分。我检查了其他颜色,因此在那些颜色的xml文件中定义没有问题。问题可能在那个睡眠的某个地方,但我不知道我应该用什么来延迟红色,仍然是橙色。 请求建议

2 个答案:

答案 0 :(得分:1)

@panini是对的,你应该在主线程上睡觉,改用另一个线程,尝试这样的事情,没有经过测试,所以我不知道它是否会起作用但是一个想法:

public void clickButton(final View v) {
    changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
    v.postDelayed(new Runnable() {
        @Override
        public void run() {
            changeButton(v, getResources().getDrawable(R.drawable.btn_red));
        }
    }, 2000);


}

也许您需要强制线程在UI中运行,无论如何都要尝试。如果这不起作用,您可以始终使用AsyncClass。希望它有所帮助。

答案 1 :(得分:1)

将延迟Runnables发布到UI线程的一种简单方法是将消息传递给UI线程的Handler

例如:

 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
      @Override
      public void run() {
        changeButton(v, getResources().getDrawable(R.drawable.btn_orange));
      }}, 2000);