函数调用期间的UI块

时间:2014-07-23 18:10:34

标签: android

假设我的布局中有10个文本视图。我想逐个更改背景,每次操作之间有一点延迟。这是一个示例代码:

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

        }
    }
}

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

,我该怎么办?

1 个答案:

答案 0 :(得分:2)

当您致电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();
}