System.out.println("Hello, World");

타이머 처리를 위해 Handler 클래스를 사용한다. 핸들러는 스레드간의 메시지 통신을 위한 장치로서 sendMessage 메서드나 유사 메서드로 특정 핸들러에게 메시지를 보낼수 있다. 핸들러는 스레드의 경계를 넘어설수 있는 범용적인 통신 장치이며 제대로 사용할려면 꽤 많은 것을 알아야 하지만 한 스레드내에서 간단하게 타이머로도 쓸수 있다.


mHandler가 핸들러이며 handleMessage에서 value값을 1 증가 시켜 텍스트뷰로 호출한다. sendEmptyMessageDelayed 메서드로 1초간의 지연시간을 두어 1초후에 호출되도록 한다.



다음은 핸들러가 하는 일이 복잡하지 않고 코드가 단순하다면 굳이 외부에 둘 필요 없이 onCreate 메서드 안에서 지역적으로 초기화 시키는 것도 가능하다. 이벤트 리스너를 onCreate에서 생성 및 초기화하는 것과 마찬가지이다.



핸들러 초기화문이 onCreate에 작성되어 있으며 최초 빈 메시지를 보내는 문장과 나란히 둘수 있어 좀더 간단해보인다. 

핸들러가 자신을 재귀호출하면 무한히 반복되지만 일정 조건이 만족되면 재호출을 중지 할 수도 있다.


핸들러로도 타이머 흉내를 낼 수 있지만 익숙해지면 오히여 융통성이 있다. 중간에 타이머를 멈추거나 주기를 바꾸는 것도 가능하지만 스레드 간의 통신을 위해 제공되는 클래스라 원래의 용도와는 조금 맞지 않는 면이 있기 때문에 CountDownTimer 클래스를 활용하는 것이다.




위의 소스는 객체를 생성하자마자 시작하며 10초동안 1초 간격으로 나누어 작업한다. 

value가 5가 되면 cancel이 되도록 명령을 했지만 무슨 이유인지 작동안하고 10초까지 카운트한다. 




Posted by 김마농