woong's
Android CountDownTimer 사용하기 본문
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 를 초기화 해주는 방식으로 처리 하였습니다 .
'Develop > Android' 카테고리의 다른 글
Android Handler 사용하기 (1) | 2016.02.14 |
---|---|
Android AsyncTask 병렬처리 하기 (0) | 2016.02.14 |
Android 어플 런칭후 DB 수정시 주의해야할 점 (0) | 2016.02.14 |
안드로이드 ProGuard 사용하기 (0) | 2016.02.13 |
Multithreading For Performance (성능 향상을 위한 멀티쓰레딩 기법) (0) | 2016.02.13 |