问题描述:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
问题分析:
Android规定只有主线程才能更新UI,在TimerTask 线程中是不能直接更新UI的,但可调用runOnUiThread方法将一个Runnable子线程任务放到主线程中执行。
修改前:
Timer timer=new Timer();
TimerTask task =new TimerTask() {
@Override
public void run() {
layout.setBackgroundResource(resIds[idx]);//更换背景图
if(idx< resIds.length-1) idx++;
else idx = 0;
}
};//end TimerTask
timer.schedule(task,3000,5000);
修改后:
Timer timer=new Timer();
TimerTask task =new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() { //在定时任务线程中再启动一个runOnUiThread 线程去更新UI
@Override
public void run() {
tv.setText("第"+(idx+1)+"张图");
layout.setBackgroundResource(resIds[idx]);//更换背景图
if(idx < resIds.length-1) idx++;
else idx = 0;
}
});//end runOnUiThread
}
};//end TimerTask
timer.schedule(task,3000,5000);