假设我的布局中有10个文本视图。我想逐个更改背景,每次操作之间有一点延迟。这是一个示例代码:
public void test(){
for (int i=0 ; i < 10 ; i++){
myTextViews[i].setBackgroundResource(R.color.red);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
}
}
问题是在运行此功能时主线程块和背景不会改变。当程序运行完该函数时,它们会一起更改。如果我希望用户看到每个背景在正确的时间更改,然后是下一个...?
,我该怎么办?答案 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();
}