woong's

Android CountDownTimer 사용하기 본문

Develop/Android

Android CountDownTimer 사용하기

dlsdnd345 2016. 2. 14. 00:25

Android CountDownTimer 사용하기


안녕하세요 . 오늘은 Android CountDownTimer 에대해 포스트를 써보려 합니다 .

안드로이드 에서 유용한 Android CountDownTimer 가 있습니다 .


처음에는 존재여부를 모르고 Thread 나 AsyncTask 를 통해서 타이머를 구현하곤하였는데 ..

Android CountDownTimer 는 상당히 편리 한것 같습니다 .


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
 
    <TextView
        android:id="@+id/count_txt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textSize="30sp"
         />
 
</RelativeLayout>
 

 

 

xml 구성은 카운트를 세기 위한 textView 하나를 넣었습니다 .


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
42
43
44
45
46
47
48
49
50
51
52
package com.iw.counttimersample;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.TextView;
 
public class MainActivity extends Activity {
 
    private static final int MILLISINFUTURE = 11*1000;
    private static final int COUNT_DOWN_INTERVAL = 1000;
    
    private int count = 10;
    private TextView countTxt ;
    private CountDownTimer countDownTimer;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        countTxt = (TextView)findViewById(R.id.count_txt);
        countDownTimer();
        countDownTimer.start();
        
    }
 
    
    public void countDownTimer(){
 
        countDownTimer = new CountDownTimer(MILLISINFUTURE, COUNT_DOWN_INTERVAL) {
            public void onTick(long millisUntilFinished) {
                countTxt.setText(String.valueOf(count));
                count --;
            }
            public void onFinish() {
                countTxt.setText(String.valueOf("Finish ."));
            }
        };
    }
    
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        try{
            countDownTimer.cancel();
        } catch (Exception e) {}
        countDownTimer=null;
    }
}
 

 

 

위 코드의 핵심은 CountDownTimer 메서드 입니다 .


메서드 안에서 CountDownTimer 클래스를 정의 합니다 . 클래스 안의 메개 변수는 

첫번째는 총 시간 , 두번째는 Tick 에 대한 시간입니다 .


저는 총시간 = 11* 1000

  Tick 시간 = 1000


을 지정 했습니다 .


이렇게 지정을 하면 onTick 메서드가 1초에 한번씩 10번이 실행이 되고 마지막으로 onFinish() 메서드를 호출합니다 .


이렇게 안드로이드에서 타이머를 쉽게 구현할수 있는 CountDownTimer 클래스가 있습니다 .



P.S 


CountDownTimer  에는 현재 Thread 의 상태를 체크하는 부분이 없습니다 .


보통 Thread 나 AsyncTask 에는 isCanceled() 라는 메서드가 있기 마련인데 


CountDownTimer  없네요 ;;;;


1
2
3
4
5
6
7
8
    @Override
    public void onDestroy() {
        super.onDestroy();
        try{
            countDownTimer.cancel();
        } catch (Exception e) {}
        countDownTimer=null;
    }

 

그래서 try Catch 문을 통해서 구현 했습니다 .

CountDownTimer  돌고 있을때는 에러 없이 잘 취소가 됩니다 .

하지만 CountDownTimer  진행하고 있지 않을때 cancel 을 하면 에러가 발생합니다 .

에러가 발생하면 catch 문에서 CountDownTimer  를 초기화 해주는 방식으로 처리 하였습니다 .




Comments