Android 函数调用期间的UI块

Android 函数调用期间的UI块,android,Android,假设我的布局中有10个文本视图。我想一个接一个地改变他们的背景,每次操作之间有一点延迟。下面是一个示例代码: public void test(){ for (int i=0 ; i < 10 ; i++){ myTextViews[i].setBackgroundResource(R.color.red); try { Thread.sleep(200); } catch (InterruptedExcepti

假设我的布局中有10个文本视图。我想一个接一个地改变他们的背景,每次操作之间有一点延迟。下面是一个示例代码:

public void test(){
    for (int i=0 ; i < 10 ; i++){
        myTextViews[i].setBackgroundResource(R.color.red);
        try {
           Thread.sleep(200);
        } catch (InterruptedException e) {

        }
    }
}
公共无效测试(){
对于(int i=0;i<10;i++){
myTextViews[i].setBackgroundResource(R.color.red);
试一试{
睡眠(200);
}捕捉(中断异常e){
}
}
}

问题是,在运行此函数期间,主线程块和背景不会改变。当程序运行完函数时,它们一起改变。如果我想让用户看到每个背景在正确的时间被更改,然后下一个背景被更改,我该怎么办?

当您调用
Thread.sleep()
时,您实际阻止的线程是UI线程,这就是您看到挂起的原因。您需要做的是启动另一个线程来处理所需的休眠或延迟,然后使用
runOnUiThread
方法

试试这个:

public void test() {
    new Thread(new Runnable() {
        public void run() {
            for(int i = 0; i < 10; i++) {
                try {
                Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //anything related to the UI must be done
                //on the UI thread, not this thread we just created

                runOnUiThread(new Runnable() {
                    public void run() {
                        myTextViews[i].setBackgroundResource(R.color.red);
                    }
                });
            }
        }
    }).start();
}
公共无效测试(){
新线程(newrunnable()){
公开募捐{
对于(int i=0;i<10;i++){
试一试{
睡眠(200);
}捕捉(中断异常e){
e、 printStackTrace();
}
//必须完成与UI相关的任何操作
//在UI线程上,而不是我们刚刚创建的这个线程上
runOnUiThread(新的Runnable(){
公开募捐{
myTextViews[i].setBackgroundResource(R.color.red);
}
});
}
}
}).start();
}

谢谢。但是您忘记了.start()和线程结束定义;)接得好!编辑了我的回答和线程。睡眠必须在里面尝试{}捕捉{}只是提到第二种方式,我应该说RunnuIthread应该可以很好地工作,但我使用了Handler。Post将runnable发布到主循环器,这很酷。感谢您花时间:)