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
Posted by 피곤키오
,