마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

핸들러로 타이머 기능 구현.

0 추천
timeHandler = new Handler() 
		{
            public void handleMessage(Message msg) 
            {
                mainTime++;
                Log.d("aaaaaaaaaaaaaaaaaaaaaaaa",mainTime+"초");
                
                if (mainTime <= 9 ) 
                {
                	timeHandler.sendEmptyMessageDelayed(0,1000); 
                }
                
            }
        };
        mainTime=0;
        timeHandler.sendEmptyMessage(0);

 

핸들러를 이용해서한 번 핸들러를 작동할 때마다

1초씩 핸들러를 실행하여 10초간 실행합니다.

핸들러가 작동되는 도중에 중지시키고, 다시 1초부터 10초까지 실행시키고 싶은데,

removeMessages(0);를 어느 타이밍에 맞춰야 하는지 모르겠습니다..

sendEmptyMessage이전에 넣으면, 멈추고 다시 1초부터 시작하지만

로그를 확인해보면 1초가아닌 0.5초 정도로 1초보다 빨리 로그가 찍힙니다.

 

 

anci (19,950 포인트) 님이 2015년 5월 18일 질문

1개의 답변

0 추천
그냥 CountDownTimer 쓰시면 안되는 건가요?

핸들러로 돌리면 1초씩 딜레이 준다해도, 그 1초를 보장해주지 않습니다.

핸들러 사용하신다면 지금 현상이 정상적인 겁니다.
익명사용자 님이 2015년 5월 18일 답변
답변 감사합니다.
이전에 countdowntimer로도 해봤는데..전역변수로 countdowntimer ct를 선언하고,
ct2 = new CountDownTimer(10000,1000)  
        {
            int a=1;
            @Override
            public void onTick(long millisUntilFinished)
            {
                // TODO Auto-generated method stub
                Log.d("CT2:","................."+a);
                a++;
            }
            @Override
            public void onFinish() //종료될 때 동작하는 함수
            {
                //실행!
            }
        }.start();
이렇게, 1초씩 10초간 실행하도록 하였습니다.
그런데 카운트다운타이머는 중간에 cancel이 안된다고 해서, 이전 답글에 달린 답변으론 해외사이트 링크로 답변 주신 분이 계셨는데... 방법이 조금 복잡해서 핸들러로 구현가능한지 질문글을 올려봤습니다..
댓글 감사합니다. 말씀해주신대로 구현하려고 합니다.
버튼이나 특정값이 들어올 때마다 카운트다운을 1초부터 시작하고 2.3.4..10초까지 실행합니다. 중간에 버튼등을 눌러서 카운트다운기능이 잇는 함수가 호출되면
ex)
버튼누름->time();
public void time()
{
       ct = new countdowntimer..
}
다시 1초부터 실행하고자 합니다..
지금
if(ct2!=null)
        {
            //ct1=null;
            ct2.cancel();
        }
        //일단 1분간격
        ct2 = new CountDownTimer(10000,1000)
        {
..생략

이렇게 하니 중간에 값이 들어오면 다시 실행됩니다만..
다른 방법으로도 구현이 가능하면 힌트라도 알려주실 수있을까요?
.
중간에 cancel이 안된다뇨?
지금 하시려는 기능이 어떤건가요?
버튼을 누를 때마다 countdown을 시작하되, 이전에 실행된 카운트다운타이머가 있다면 이전 것을 cancel시키고 다시 1초부터 10초까지 실행시키고자 합니다. 버튼을 비교적 최근에 누른 후의 시간+10초뒤에 이벤트를 실행시키려고 합니다. 언제 버튼을 누를지 모르니, 누를 때마다 타이머를 새로 갱신시키려고 했습니다.
ct2.cancel();을 한 후, 다시 타이머를 실행시키니 됩니다만..맞는 방법인진 모르겠습니다.
...