앱 만들기/안드로이드

안드로이드의 기술 # Handler 타이머 구현하기- 정지 기능

나도 처음이야 2020. 9. 3.

soo0100.tistory.com/1243

 

안드로이드의 기술 # Handler 타이머 구현하기

안드로이드 핸들러를 사용해서 타이머를 구현해보겠습니다. 총 2 개의 포스팅으로 나누어서 1강에서는 기본 타이머를 구현해보고, 2강에서는 타이머를 스탑 하는 기능을 만들어 보겠습니다. 다

soo0100.tistory.com

 

지난 시간 포스팅에 이어

오늘은 타이머 정지 기능을 만들어 보겠습니다. 완성된 영상의 모습은 하기와 같습니다.

 

 

지난 시간 기본 소스에 추가토록 하겠습니다.

하기 처럼 UI 및 핸들러 인스턴스 변수 만듭니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
// UI 인스턴스 변수 생성
        button = (Button)findViewById(R.id.button);
        button2 = (Button)findViewById(R.id.button2);
        textView = (TextView)findViewById(R.id.textView);
// 타이머를 위한 핸들러 인스턴스 변수 생성.
        timer = new TimerHandler();
 
    }

 

시작/일시 정지 버튼 함수를 구현합니다.

타이머 구현을 위한 핸들러 내용은 이전 포스팅을 참고 바랍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void onStartPauseButton(View view){
        // 타이머 시작!
        if(status == 0// 정지 상태 라면, 재 시작.
        {
            status = 1;
            timer.sendEmptyMessage(0);
            button.setText("일시정지");
 
        }else if(status == 1){ // 타이머 동작 중이라면, 일시 정지 시키기
 
            status = 0;
            // 1번 메시지를 던진다.
            timer.sendEmptyMessage(1);
            button.setText("시작");
        }
    }
cs

 

정지 버튼을 위한 함수를 구현합니다.

메시지 2번 값을 만들어서 메시지를 안드로이드 OS에게 던지고 있죠.

1
2
3
4
5
  public void onStop(View view){
            status = 0;
            timer.sendEmptyMessage(2);
    }
 
cs

 

가장 중요한 핸들러 클래스 입니다.

handleMessage() 함수 내에 msg.what 2번 동작을 하기 처럼 구현 했습니다.

0 번 타이머 반복 메시지를 큐에서 삭제하고, 버튼 텍스트를 업데이트 해줍니다.

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
32
33
34
35
36
37
38
39
40
41
 // 타이머 핸들러 클래스.
    class TimerHandler extends Handler{
 
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
 
            switch (msg.what){
                case 0// 시작 하기
                        if (timerTime == 0) {
                            textView.setText("Timer : " + timerTime);
                            removeMessages(0);
                            break;
                        }
                        // Main Thread 가 쉴때 Main Thread 가 실행하기에
                        // 오래걸리는 작업은 하면 안된다. (무한 루프 문 etc.. 은 쓰레드로)
                        textView.setText("Timer : " + timerTime--);
                        sendEmptyMessageDelayed(01000);
                        Log.d("test""msg.what:0 time = " + timerTime);
 
                    break;
 
                case 1//일시 정지
                    removeMessages(0); // 타이머 메시지 삭제
                    textView.setText("Timer : " + timerTime); // 현재 시간을 표시.
                    Log.d("test" , "msg.what:1 time = " + timerTime);
                    break;
 
                case 2// 정지 후 타이머 초기화
                    removeMessages(0); // 타이머 메시지 삭제
                    timerTime = 30// 타이머 초기화
                    textView.setText("Timer : " + timerTime);
                    button.setText("시작");
                    Log.d("test" , "msg.what:1 time = " + timerTime);
                    break;
 
 
            }
 
        }
    }
cs

 

이상으로 안드로이드에서 

핸들러를 활용한 타이머 기능을 구현해보았습니다.

더불어, 시작+일시정지+정지(초기화) 도 만들어 보았네요.

 

1강, 2강 포스팅을 활용하셔서

여러분 각자에 맞게 구현하시면 더 좋은 기능으로 탄생할 거 같습니다.

감사합니다. :)

 

 

[전체 소스는 하기 포스팅을 참고드립니다.]

soo0100.tistory.com/1317

 

 

안드로이드의 기술 # Handler 타이머 구현하기- 전체 소스

티스토리에 댓글로 전체 소스를 요청하신 분이 계서서 공유드립니다. 핸들러 타이머의 테스트 예제 임을 감안하시고 보시면 좋겠습니다. 당연히 버그나 이상 동작이 있을 수 있습니다. 오늘도

soo0100.tistory.com

 

반응형

댓글