우선, 시계를 출력하려면 당연히 Timer가 필요하다.

java.util.Timer Class 를 이용해서 일정한 주기로 Task를 실행할 수 있다.

Task는 Method를 넘겨주는게 아니라, 역시 TimerTask의 SubClassing 해서 구현한 다음 해당 Class의 Object를 넘겨줘야한다.

    @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mCurTimeTextView = (TextView) findViewById(R.id.CurrentTimeTextView);

MainTimerTask timerTask = new MainTimerTask();

mTimer = new Timer();

mTimer.schedule(timerTask, 500, 1000);

}


Activity 가 생성될때, 불러지는 onCreate를 Override하여, TimerTask Object와 Timer Object를 만들고, timer의 schedule method를 통하여,
일정 주기로 Task가 호출 될 수 있게 한다.

2번째 Argument가 최초 실행 timing이고, 3번째 Argument가 실행 주기이다. 초단위로 시계를 보여줄것이기 때문에,
1초마다 호출되도록 프로그래밍 하였다.

private Handler mHandler = new Handler();

private Runnable mUpdateTimeTask = new Runnable() {

public void run() {

......

}

};

class MainTimerTask extends TimerTask {

public void run() {

mHandler.post(mUpdateTimeTask);

}

}


MainTimerTask Class구현부가, InnerClass 로 TimerTask를 SubClassing한 형태인데, 
Android에서는 MainThread이외에서는 UI Object를 제어 할 수 없기 때문에,
Handler를 통해서 MainThread에 Task를 넘겨 준다.

즉 시간을 Update하는 부분은 Runnable Object의 Run() Method이다.
Run() Method는 아래와 같이 구현한다.

Date rightNow = new Date();

SimpleDateFormat formatter = new SimpleDateFormat(

"hh:mm:ss dd.MM.yyyy");

String dateString = formatter.format(rightNow);

mCurTimeTextView.setText(dateString);


현재 시간을 가져오기 위해 java.util.Date Class를 사용했으며,
Date를 String으로 변환하기위해 java.text.SimpleDateFormat Class를 사용하였다.
SimpleDateFormat Class에 대한 자세한 사용법은 http://developer.android.com/reference/java/text/SimpleDateFormat.html 를 참고 하길 바란다.
formatter를 통해서 Date String을 만들고 해당 String을 TextView에 setTest로 setting함으로써 시간을 세팅할 수 있다.

이외에 유의 해야 할점은 Activity Life Cycle에 따른 Timer stop/start 이다.

onDestory/onPause 에서 Timer 를 정지 시키고, onResume에서 재 시작해주도록 아래와 같이 프로그래밍 한다.

@Override

protected void onDestroy() {

mTimer.cancel();

super.onDestroy();

}


@Override

protected void onPause() {

mTimer.cancel();

super.onPause();

}


@Override

protected void onResume() {

MainTimerTask timerTask = new MainTimerTask();

mTimer.schedule(timerTask, 500, 3000);

super.onResume();

}


간단한 프로그래밍이지만, Android Life Cycle/ MultiThread에서의 UI 제어등 알아두어야 할것이 꽤 있다.





+ Recent posts