- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 안드로이드에서 타이머 구현 하기 본문
안드로이드에서 타이머 구현 하기 |
개발환경 : JDK 1.6, Android 2.1, window XP |
이번에는 안드로이드에서 타이머 구현 방법에 대해 언급할려고 한다.
쓰임세는 다양하다. 게임에서 시계표시를 할수 있고 타이머 관련
구현도 가능하며 시간 간격에 맞게 어떤 작업을 수행하고자
할때도 쓰일것이다. 그래서 한번은 정리할 필요가 있었다.
(1) java 에서 주로 쓰는 방법 |
안드로이드는 java를 기반으로 하기 때문에 java 에서 사용하는
타이머 구현 방법을 떠올릴 것이다.
Java 에서 구현하는 방법은 여러가지가 있는데 그 첫번째는
스레드를 이용하는 것이다.
추상클래스인 Runnable 를 상속받던지 아니면 Thread 클래스를
생성해서 run 함수를 구현하는데 그 속에 일정한 간격으로
루프를 돌수 있도록 구현 하면 된다.
private final class SwapViews implements Runnable {
private final int mPosition;
public SwapViews(int position) {
mPosition = position;
}
public void run() {
// 기능구현
Thread.sleep(1000);// 1초의 정지
}
}
// 위 클래스 사용
SwapViews swapViews = new SwapView(0);
swapViews.start();
두번째는 Timer 를 이용하는 방법이다.
Timer 클래스는 시간관리를 위해 만들어진 클래스 이므로
이것이 타이머 관리를 위해 더 적절한 방법일지도 모르겠다.
그리고 구현하기도 쉽다. 파라미터로 몇 개의 값만 넘기면
되기 때문이다.
예제를 보게 되면 첫번쨰 파라미터는 작업을 수행할 TimerTask
클래스 객체를 만들어 넣으면 된다. 그속에 run 함수는 필수로
구현 해야되며 run 에 있는 내용이 설정한 시간 간격에 맞게
수행이 되는것이다.
그리고 두번쨰는 run 이 실행되고 종료 시간을 나타낸다.
두번째 파라미터만 넣게 되면 한번으로 끝나지만 세번째 파라미터를
넣게 되면 넣은 값만큼의 간격으로 반복하게 되는것이다.
TimerTask task = new TimerTask(){
public void run() {
try {
mainTime++;
int min = mainTime / 60;
int sec = mainTime % 60;
String strTime = String.format("%s : %s", min, sec);
//Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
Timer mTimer = new Timer();
mTimer.schedule(task, 1000, 1000);
// 3초후 run을 실행하고 종료 timer.schedule(task, 3000);
// 10초후 run을 실행하고 매3초마다 실행 timer.schedule(task, 10000, 3000);
(2) android 에서 Handler 을 이용한 방법 |
위의 두가지 방법은 java 에서 흔히 구현하는 방법이고 안드로이드에서는
또 다른 방법이있다. 굳이 그 방법을 소개 할려는 것은 위의 방법으로는
내부적으로 수행하는 기능은 구현할지 모르겠지만 화면상에 실시간으로
시간값을 변경해야 한다던지 시계가 움직이는 애니메이션 같은 것을
구현하고자 한다면 아래에 소개한 방법으로 해야 되기 때문이다.
그것은 android.os.Handler 클래스를 이용하는 것인데 백그라운드
메시지를 전달할때도 쓰이는데 이것을 sendEmptyMessageDelayed 함수를
이용해 일정한 간격으로 계속 반복해서 보냄으로서 시계역활을 할수 있게 된다.
구현은 android.os.Handler 클래스 객체를 정의한다.
그리고 필수 함수인 handleMessage 를 구현한다. handlerMessage 함수내부에는
sendEmptyMessageDelayed 함수를 실행해야 한다. 그래야 반복적으로
수행이 될것이다. 이 함수의 두번째 파라미터로 시간이 들어가게 되는데
반복하고자 하는 시간을 넣으면 된다.
mHandler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
/** 초시간을 잰다 */
int div = msg.what;
int min = mainTime / 60;
int sec = mainTime % 60;
String strTime = String.format("%02d : %02d", min, sec);
this.sendEmptyMessageDelayed(0, 1000);
mTimeView.setText(strTime);
mTimeView.invalidate();
mainTime++;
}
};
이렇게 정의를 했으니 이것을 사용해야 하는데 처음 시작하고자 하는 곳에
mHandler.sendEmptyMessage(1); 함수를 실행하면 된다. 파라미터로 넘어가는
1 의 값은 핸들의 구분자이다. 여러 개의 기능을 사용하고자 할 때 파라미터
값을 바꾸고 handleMessage 로 넘어온 Message 의 what 변수로 구분하게 된다.
위의 int div = msg.what 가 sendEmptyMessage 의 파라미터로 넘어간 값을
가져오게 되는 것이다.
[출처] http://mainia.tistory.com/603
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 인트로 나오고 자동으로 화면 전환 하는게 가능한가요? (0) | 2012.03.16 |
---|---|
[안드로이드] 액티비티 이동간 애니메이션 샘플 코드 (0) | 2012.03.16 |
[안드로이드] 스레드와 핸들러 (0) | 2012.03.15 |
[안드로이드] Align & Layout & Scroll View / 정렬 & 레이아웃 & 스크롤 뷰 (0) | 2012.03.02 |
[안드로이드] 안드로이드 개발시 필요한 몇가지 TIP (0) | 2012.03.02 |