안녕하세요 푸민입니다.
안드로이드에서 TimerTask 를 활용하여 1초단위 카운트를 하는 메소드를 만들어 보겠습니다!
먼저 목표 시간을 설정합니다.
Calendar dday;
dday = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dday.setTime(formatter.parse(dDate));
dDate 의 경우 목표 시간을 설정해준 Data 타입입니다. 포맷터를 이용하여 Calendar 에 셋팅해 준뒤 실제 TimerTask 클래스를 구현합니다. 굳이 Calendar 클래스를 사용하실 필요는 없어요~
private class CountTimer extends TimerTask{
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
getTimer();
}
};
Handler 를 쓰는 이유는 실제 보여줄 화면에는 MainThread(UIThread) 외에는 접근이 불가능하기 때문입니다. TimerTask, Thread 등을 사용할 때는 화면에 텍스트를 바꾼다든지 각종 변경을 하려면 Handler 클래스를 이용합니다.
그러면 실제 기능이 있는 getTimer() 메소드를 구현해볼까요?
private void getTimer() {
long tday = System.currentTimeMillis();
//현재 시간 정보를 불러온다.
long day = dday.getTimeInMillis();
//목표 시간정보를 불러온다.
long diff = day - tday;
//차이를 구한다.
String timer = "00:00:00";
//기본을 00:00:00 으로설정한다.
if(diff > 0){
//시간이 남아 있다면
int hours = (int) (diff / (1000 * 60 * 60));
//시간을 구한다.
int minutes = (int) (diff % (1000 * 60 * 60)) / (1000 * 60);
//분을 구한다.
int seconds = (int) ((diff % (1000 * 60 * 60)) % (1000 * 60) / 1000);
//초를 구한다.
if (hours > 23) {
//24시간보다 크면 날을 입력한다.
timer = String.format("%2d일 %02d:%02d:%02d", hours / 24, hours - 24 > 23 ? hours - 48 : hours - 24, minutes, seconds);
} else {
timer = String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
}
textView.setText(timer);
//텍스트 뷰에 설정한다.
}
이렇게 메소드까지 만들고 실제 시간 적용이 시작될 때는
countTimer = new Timer();
countTimer.schedule(new CountTimer(), 1000, 1000);
종료할때는
countTimer.cancel();
countTimer = null;
이렇게 해주면 되요~
'Development > Android' 카테고리의 다른 글
[안드로이드][Xml] Xml 파싱 DOM (0) | 2015.09.29 |
---|---|
[안드로이드][XML] Xml 파싱 SAX XmlPullParser (0) | 2015.09.26 |
[안드로이드] Android ListView 속성값을 파헤쳐보자! (0) | 2015.09.24 |
[안드로이드] Thread 메소드 동기화 (0) | 2015.09.23 |
[안드로이드] Android Image Volley 분석6 (0) | 2015.09.22 |
댓글