android.os.Handler
android.os.Handler
클래스를 사용하여 타이머 이벤트를 간단하게 만들어보겠습니다.
다음은 1초에 한번씩 정수값을 증가시켜 텍스트 뷰로 출력하는 예제입니다.
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class Timer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView) findViewById(R.id.TextView); //sendEmptyMessage 메소드로 빈 메세지를 보냄으로서 호출된다. handler.sendEmptyMessage(0); } //매 1초 마다 증가할 정수값 private int value = 0; private TextView textView = null; //타이머를 처리하기 위해 핸들러 객체 생성 private Handler handler = new Handler() { public void handleMessage(Message msg) { value++; textView.setText("Value = " + value); //1초간의 지연 시간을 두어 1초후에 자기자신이 호출 되도록 한다. handler.sendEmptyMessageDelayed(0, 1000); } }; }
위의 소스를 보면 Handler
객체의 handleMessage
메소드를 재정의 하였다.
sendEmptyMessage
메소드를 한번한 호출해주면 handleMessage
메소드 내에서 자기 자신을 계속 호출하기때문에 1씩 증가한 값이 TextView
에 계속 찍히게 되는 것이다.
android.os.CountDownTimer
주기적인 작업을 처리하는 좀 더 공식적이고 간편한 방법은 CountDownTimer
클래스를 활용 하는 것이다.
생성자는 다음과 같다.
CountDownTimer(long millislnFuture, long countDownInterval)
첫번째 인수 long millislnFuture
는 카운트 다운을 할 총 시간이며, 두번째 인수 long countDownInterval
는 한번 카운트 할 주기이다. 단위는 둘다 1/1000 초이다.
타이머는 총 주기동안 실행되면서 onTick
메소드를 호출하다가 총 시간이 경과 되면 onFinish
메서드가 호출된다.
CountDownTimer
객체를 생성한후 start
메서드를 호출하면 즉시 동작한다.
import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.widget.TextView; public class Timer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView) findViewById(R.id.TextView); //타이머 설정 timer = new CountDownTimer(10 * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { value++; textView.setText("Value = " + value); if( value == 5 ) timer.cancel(); } @Override public void onFinish() { } }; //타이머 시작 timer.start(); } //매 1초 마다 증가할 정수값 private int value = 0; private TextView textView; private CountDownTimer timer; }
'안드로이드 정복' 카테고리의 다른 글
스레드와 핸들러 (1) | 2010.08.13 |
---|---|
네트워크 - 비동기 다운로드 (0) | 2010.08.09 |
네트워크 - HTML 읽기 (1) | 2010.08.09 |
네트워크 - 인터넷 연결 관리자 (0) | 2010.08.09 |
옵션 메뉴 만들기 (0) | 2010.08.02 |