본문 바로가기
개발 이야기/안드로이드

[Android] 안드로이드 주기적으로 실행되는 타이머 실행하기(Timer, CountDownTimer 실행하기)

by 런던살자 2019. 1. 1.

안녕하세요 마블랑입니다.

 

프로그래밍을 할때 특정한 행동을 반복적으로 실행할때는 반복문을 실행합니다. 하지만 UI가 있는 프로그램에서 메인스레드에서 반복문을 실행하면 반복문이 종료될때까지 다른 행동을 수행할수가 없습니다.

 

그러므로 자식스레드를 생성하고 그 위에 반복문을 실행해야 메인스레드의 명령도 처리하고 특정행동을 반복적으로 수행할 수 있습니다.

 

안드로이드에서는 위 행동을 대신할 간단하게 자식스레드를 생성하고 특정행동을 반복하게 해주는 클래스가 있습니다.

 

바로 Timer 클래스와 CountDownTimer 클래스 입니다.

 

 

하나씩 차례대로 사용법에 대해서 알려드립니다~

 

Timer timer = new Timer();


TimerTask TT = new TimerTask() {
      @Override
      public void run() {
           // 반복실행할 구문

      }

};

 

timer.schedule(TT, 0, 1000); //Timer 실행

timer.cancel();//타이머 종료

 

Timer 클래스를 사용하려면 TimerTask의 객체를 생성하여 실행하려는 구문을 생성하고 TImer의 객체에 매개변수로 추가한뒤 실행을 해야됩니다.

 

Timer객체는 schedule 함수를 이용하여 실행이 가능합니다. 매개변수는 (TimerTask, 처음 대기시간, 반복시간) 입니다.

 

시간의 단위는 ms단위로 1초 기준 1000을 입력하시면 됩니다.

 

두번째 인자인 처음 대기시간은 schedule 함수 실행후 얼마나 뒤에 실행할 것인지에 해당하는 매개변수입니다.

 

 

이제 CountDownTimer 클래스 사용법에 대해서 알려드립니다~

 

CountDownTimer CDT = new CountDownTimer(10 * 1000, 1000) {
            public void onTick(long millisUntilFinished) {

                  //반복실행할 구문

            }
            public void onFinish() {
                  //마지막에 실행할 구문
            }
};

 

CDT.start(); //CountDownTimer 실행

CDT.cancel();// 타이머 종료

 

CountDownTimer 의 객체를 생성할때 매개변수는 총 실행될 시간과 반복주기시간입니다.

 

단위는 모두 ms 단위이므로 위 구문에서는 10초(10*1000 ms) 동안 1초(1000 ms)마다 실행하겠다 라는 뜻입니다.

 

CountDownTimer 의 객체를 생성하면 자동으로 onTick과 onFinish 함수가 추가가 됩니다.

 

onTick는 반복실행할 구문을 추가하면되고 onFinish는 마지막에 실행될 구문을 추가하시면 됩니다.

 

 

그럼 예제를 실행해 보겠습니다.

 

두개의 타이머를 동시에 실행하고 로그를 캡처하였습니다.

 

Timer 클래스와 달리 CountDownTimer 클래스는 총 실행시간이 끝나면 자동으로 타이머가 종료됩니다.

 

계속 이어서 CountDownTimer를 실행하려고 한다면 onFinish 함수에 CDT.start(); 를 추가하셔서 종료가 되자마자 실행시키면 반복실행이 됩니다.

 

 

이렇게 안드로이드의 두가지 Timer에 대해서 알아봤습니다

 

타이머 내에서 UI를 변경하려면 추가로 코딩을 해야하지만 타이머를 통해 특정구문을 반복적으로 실행하는데 도움이 많이 되길 바랍니다.

 

이상 마블랑이었습니다~

 

 

 

댓글