오류 수정
안드로이드android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
피노키오이
2019. 12. 6. 23:22
반응형
개요
이번에는 안드로이드 Thread 작업중
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
라는 오류가 발생했습니다.
이 오류는 안드로이드 UI는 mainThread가 담당하는데 다른 Thread에서 UI를 계속 호출해서 오류가 났던 것입니다..
ㄷㄷ
무튼 그래서 이 오류는 Handler를 사용해도 되고 mainThread에서 이작업을 하라고 명시해 주어도 되는데
이번에는 mainThread에서 명시해주는 것을 사용해 보겠습니다..
안드로이드 카운트다운 Thread 코드
private int startTimerTask(final String min) {
// min = 01:00:00
stopTimerTask();
timerTask = new TimerTask() {
String strminute = min.substring(0,2);
String strsecond = min.substring(3,5);
String strmilli = min.substring(6);
int minute = Integer.parseInt(strminute);
int seconds = Integer.parseInt(strsecond);
int millise = Integer.parseInt(strmilli);
int milliseconds = (minute*6000 + seconds*100+millise);
// 1분에 60000밀리세컨드
// 1분에 60초
// 1초에 1000밀리세컨드
@Override
public void run() {
milliseconds--;
final int seconds = (int) (milliseconds / 100) % 60;
final int minutes = (int) ((milliseconds / (100 * 60)) % 60);
final int tmillisecond = ((milliseconds) % 100);
txt_timer.post(new Runnable() {
@Override
public void run() {
if (minutes < 10) {
txt_timer.setText("0" + minutes + ":" + seconds + ":" + tmillisecond);
if (seconds < 10) {
txt_timer.setText("0" + minutes + ":" + "0" + seconds + ":" + tmillisecond);
if(milliseconds<0) {
txt_timer.setText("00:00:00");
stopTimerTask();
}
}
}
}
});
}
};
timer.schedule(timerTask, 0, 10);
return 0;
}
private void stopTimerTask() {
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
}
Runnable() 안의 run부분에서 UI작업을 해주면 오류는 해결됩니다..
반응형