Java/안드로이드 안드로이드 Timer 구현 Z@r0 2019. 9. 12. 02:52 필자는 버튼을 누르면 초가 지나는 timer를 구현하고 싶다.(아래 코드는 버튼을 클릭했을 때의 이벤트 내에 있음)그러기 위해서는 timer 스레드를 만들어 줄 필요가 있는데 코드는 다음과 같다. final TextView Display_ = (TextView) findViewById(R.id.Display_); final Timer ssmmss = new Timer(); TimerTask outputtime = new TimerTask() { @Override public void run() { msecond ++; if(msecond > 5) { ssmmss.cancel(); }else Display_.setText(""+msecond); } } }; ssmmss.schedule(outputtime, 0,1000); schedule 에 들어있는 것들 (timeTask 스레드, 지연시간, 주기) 이다.이렇게 하면 필자는 바로 시간초가 나올 줄 알았지만 그렇게 간단한 것이 아니였다.Only the original thread that created a view hierarchy can touch its views.이런 에러가 발생을 했는데 원인은 메인 스레드 이외에 생성한 스레드로 UI를 변경할 때 나는 에러라고 한다.그렇기에 UI를 변경하는 구문들을 빼야하는데 그러면 저 타이머 스레드를 생성한 의미가 없어진다.고로 핸들러를 이용하여 저기 타이머 스레드가 작동할 때마다 핸들러의 내용을 불러오게 만들면 된다. final TextView Display_ = (TextView) findViewById(R.id.Display_); final Timer ssmmss = new Timer(); final Handler timerhandler = new Handler(){ public void handleMessage(Message msg){ msecond ++; if(msecond > 5) { ssmmss.cancel(); }else Display_.setText(""+msecond); } }; TimerTask outputtime = new TimerTask() { @Override public void run() { Message msg = timerhandler.obtainMessage(); timerhandler.sendMessage(msg); } }; ssmmss.schedule(outputtime, 0,1000); Message msg = timerhandler.obtainMessage();timerhandler.sendMessage(msg);이렇게 핸들러를 호출 하여주면 구동이 가능해진다. 저작자표시