제가 타이머를 아래와 같이 구성하였습니다.
Timer mTimer;
TimerTask mTask = new TimerTask() { public void run() { try{onTimer(); // 이 함수는 UI를 변경하는 함수로써 상당히 복잡한 함숩니다.
}catch(Exception ex){ex.printStackTrace();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {// 이 함수는 액티비티 create함수입니다.
super.onCreate(savedInstanceState);
mTimer = new Timer();
mTimer.schedule(mTask, 100, 100);
}
컴파일에는 다른 이상이 없는데 실행시 아래와 같은 exception이 발생합니다.
"Only the original thread that created a view hierarchy can touch its views."
타이머에서 정말 UI를 변경할수 없는지...
스레드를 구현하려면 THREAD, TIMER, HANDLER를 이용할수 있다던데
스레드나 핸들을 이용하지 않고 타이머를 이용하여 UI를 변경하는 방법을 알고 싶습니다.
THREAD와 HANDLER를 이용하여 UI를 변경시키는데 성공했는데
TIMER를 이용하면 계속 오유가 나옵니다.
가능하다면 어떻게 해야 한는지 고수님들 가르쳐주세요.
그리구 즐거운 하루 보내세요.
final Handler uiHander = new Handler()
{
public void handleMessage(Message msg)
{UI접근코드}
};
더 자세한 사용법은 구글링 1분만해보시길..
TimerTask mTask 가 Activity 안에 있다면
public void run() {
try{
onTimer();
}catch(Exception ex){
ex.printStackTrace();
}
}
요걸
public void run() {
runOnUiThread(new Runnable(){
public void run() {
try{
onTimer();
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}




불가능 한걸로 알고 있습니다.핸들러를 이용해서 위임을 하던가 해야지, 타이머 자체에서 직접 UI를 건드릴 수는 없을 겁니다.