메뉴 건너뛰기

XEDITION

Open

http://blog.naver.com/PostView.nhn?blogId=ssarang8649&logNo=220947884163



안녕하세요. 이번 포스팅은
안드로이드를 공부하다 주기적으로 어떤 기능을 실행하고 싶어
타이머 Timer 를 쓰게되었는데 
이게 잠시 중지했다가 재시작 하고 싶은 경우 생기는 골치아픈 문제가 있어
적어두고 필요하신 분에게는 정보가 되지 않을까 해서 진행하는 포스팅입니다.


본 포스팅에서 확인하실 수 있는 정보는

안드로이드 타이머 (Timer) 클래스 사용법 기초

에 대한 것입니다.


일단 Timer 를 사용해야겠다 생각하신분은
무언가 일정한 주기마다 하고 싶은것

이 있을 때이실 텐데요.

예를들어 매 정각마다 정각 임을 알린다던지
몇 분 간격으로 현 Status 가 이상한지 체크한다던지 정도가 되겠져


안드로이드 타이머를 사용하기 위해서는 먼저
타이머 테스크 TimerTask 라는 놈이 필요합니다.
 "타이머가 주기적으로 해야할 일(Task)" 
을 정의해 논 친구라고 할 수 있져 
이 친구는 추상 클래스(abstract)라 선언과 동시에
강제적으로 run() 메서드를 정의하게 자동 세팅됩니다.
 

import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { static int counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TimerTask tt = new TimerTask() { //TimerTask 추상클래스를 선언하자마자 run()을 강제로 정의하도록 한다. @Override public void run() { /////////////////// 추가한 코드 //////////////////// Log.e("1번태스크카운터:", String.valueOf(counter)); counter++; ////////////////////////////////////////////////// } }; } }

tt 라는 TimerTask 객체를 선언했습니다.
그리고는 run() 안에 하시고 싶은 것을 넣으면 되는데요.

제 목표는 
"3초마다 counter를 하나씩 증가"
시키는 것입니다.

1. 여기서 주기는 3초가 되겠고
2. 하고 싶은 일(Task)는 counter하나씩 증가가 되는데

1번을 담당하는 것이 Timer이고
2번을 담당하는 것이 TimerTask 입니다.


이제 이 Task를 3초에 한번씩 동작하도록 하는것만 남았는데
Timer 객체를 선언한 후 
schedule이라는 메서드로 Timer를 세팅하면 완성입니다.

package com.android.test.timertest; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { static int counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TimerTask tt = new TimerTask() { @Override public void run() { Log.e("1번태스크카운터:", String.valueOf(counter)); counter++; } }; /////////// / Timer 생성 ////////////// Timer timer = new Timer(); timer.schedule(tt, 0, 3000); ////////////////////////////////////// } }

schedule 메서드는 용도에 따라 파라미터 개수 및 타입이 다른데요.
자세한건 아래 링크에서 확인하세용

제가 사용한 schedule 파라미터는 3개 로 (TimerTask, int, int) 타입이며
schedule(
1. TimerTask : 주기적으로 하고 싶은 일,
2. int : 처음에 몇 초를 기다렸다가 실행할까?,
3. int : 얼마마다 한번씩 실행할까?
)

이렇게 사용합니다. 
여기서 int 의 시간은 ms 기준입니다. (3000ms = 3s)

timer.schedule(tt, 0, 3000); = tt라는 TimerTask 를 선언과 동시에 시작하되 (딜레이 0), 3초마다 반복


이런 뜻이 되는거져


그래서 요 코드를 실행하고 결과를 보면

저래 3초마다 Log가 출력됨을 확인할 수 있습니다.
제 목표대로 counter도 1씩 증가 하고 있져.



안드로이드 타이머는 이렇게 사용하면 되지만


TimerTask 를 저렇게 직빵으로 정의해버리면

만약 타이머를 멈췄다가 다시 돌리고 싶은 경우에 코드를 한 번 수정해 줘야합니다.

 

원래 같이 포스팅 하려 했으나.. 넘 졸려서.. 
다음 포스팅에서

타이머를 중지했다가 다시 돌리는 법


에 대해 자세하게 공유해보도록 하겠습니다. 

 

 

 


 

 

 

번호 제목 글쓴이 날짜 조회 수
32 linux buffer/cache 비우기 proin 2022.01.04 5
31 Python3를 사용하여 openalpr 실행 proin 2020.10.20 5
30 [android 개발] UI Thread 외부에서 UI 관련 작업 호출 하기 proin 2020.10.18 3
29 안드로이드 자바 타이머 (Timer) 정지 후 재시작 하기, java.lang.IllegalStateException: TimerTask is scheduled already proin 2020.10.17 3
» 안드로이드 타이머 사용법 기초 - Android Timer 주기적으로 메서드 실행하기 proin 2020.10.17 2
27 WINDOWS 10 탐색기 새로고침 버그 proin 2020.10.16 4
26 bjpublic / minecraft-python 마인크래프트와 함께 즐겁게 파이썬 proin 2020.08.27 2
25 bjpublic / aws 당신이 지금 알아야 할 AWS proin 2020.08.27 2
24 bjpublic / MLpythonpiece 머신러닝을 위한 파이썬 한 조각 proin 2020.08.27 3
23 bjpublic / smartwork 나만의 스마트워크 환경 만들기 proin 2020.08.27 3
22 bjpublic / whitehacker 화이트 해커를 위한 웹 해킹의 기술 proin 2020.08.27 2
21 bjpublic / TMI-Deeplearning 친절한 실전 딥러닝 수업 proin 2020.08.27 2
20 [펌] 포토샵 비정품 경고 알림 해제하기 proin 2020.05.11 1
19 패킷트레이서 5.3.3 file proin 2019.03.20 4
18 라즈베리파이 3 B+ 라즈비안 외 지원안되는 OS 설치 방법 file proin 2019.03.15 2
17 SoftEtherVPN proin 2019.01.08 6
16 옵테인 메모리 달면 HDD가 SSD 처럼 빨라진다? 정말? - IT 동아 proin 2018.10.01 2
15 XE exe 업로드 시 -x 붙는 현상 수정 방법 proin 2018.08.20 51
14 Vim 단축키 정리 proin 2018.06.09 4
13 윈도우의 VMware에 macOS Sierra 설치하기 proin 2018.05.30 4
위로