안녕하세요.


이번에 자바/안드로이드를 처음 접하다 보니 사소한 거라도 질문이 많이 나오네요. ^^;

질문내용은 간단한 키버튼 예제가 있습니다. 키버튼 클릭시 키 값을 그리는 예제인데 여기서 handler 클래스를 사용해서

구현을 했는데 handler 클래스 활용이 이해가 되지 않습니다.

소스는 아래와 같습니다.


public class KeyEx extends Activity {
 ....
public class TickHandler extends Handler {
        public void handleMessage( Message msg ){
            keyView.invalidate();
            if( tickHandle != null ) tickHandle.sleep(100);
        }
        
        public void sleep( long delayMills ) {
            removeMessages( 0 );
            sendMessageDelayed( obtainMessage(0),delayMills );
        }
    }
}

public class KeyView extends View{
....
public boolean onKeyDown( int keycode, KeyEvent event ) {
        this.keycode = keycode;
// invalidate();
        return super.onKeyDown(keycode, event);
    }
}


소스에서 보시면 키다운시 키값만 저장을 합니다. 그래서 handler 클래스에서 handleMessage 에서 keyView.invalidate() 발생하고

sleep()함수에서 sendMessageDelayed 함수를 호출함으로써 키 값을 그리게 됩니다.

제가 여기서 궁금한 것은

1. 키 다운시 자동으로 메세지가 발생하여 handlerMessage 함수가 호출되는것인가?

2. handlerMessage함수에서 keyView.invalidate() 함수를 호출만 하면 화면에 그리지지 않고 sendMessageDelayed 함수를

    호출해야만 화면갱신이 되는데 왜 그러는것인가?

3. sendMessageDelayed 함수는 어디로 보내는것인가?

4. 키다운에서 invalidate(); 함수를 호출해서 그려도 되는데 handler 클래스를 활용해서 하는 이유는 무엇인가?


아직 이쪽 계통으로 초보라 쉽지는 않네요.. 고수님들의 조언 부탁드립니다.


수고하세요~