안드로이드(Android) 개발 Timer 구현하는 방법 |
환경: Eclipse Mars, Android 4.2.2 |
안드로이드에서 타이머 기능은 써 먹을 곳이 많습니다. 일정시간 이후 넘어가는 Intro 화면이나 정해진 간격으로 반복작업이 필요한 곳에 많이 사용합니다. 구현 방법은 두 가지 정도가 있습니다. 첫 번째는 안드로이드 SDK 에서 제공하는 스케줄용 Timer 와 TimerTask 를 이용하는 것입니다. 두 번째는 스레드 클래스나 인터페이스를 이용하는데, Sleep 을 이용해서 간격을 유지합니다. 저는 첫 번째 방법을 주로 사용합니다. 가독성과 구현이 쉽기 때문입니다.
▼ 첫 번째 방법인 스케줄용 클래스인 Timer 와 TimerTask 이용하는 방법입니다. 그림처럼 TextView 화면에 현재 시간을 표시하는 기능을 구현할 것입니다.
▼ 메인 클래스는 Timer 입니다. Timer 객체를 생성하고 반복 수행할 간격을 세팅합니다. 그리고 작업할 내용은 TimerTask 클래스를 만들어서 run() 함수에 추가합니다. Activity 가 종료되는 시점인 onDestory() 에서 Timer 를 종료해야 합니다. 실행함수는 mTimer.cancel() 입니다.
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class TimerActivity extends AppCompatActivity { private Timer mTimer; private TextView mTvTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_timer); mTvTimer = (TextView) findViewById(R.id.tv_timer); // 타이머 세팅 mTimer = new Timer(); //mTimer.schedule(new CustomTimer(), 1000); // 한번 실행 mTimer.schedule(new CustomTimer(), 2000, 1000); } @Override protected void onDestroy() { mTimer.cancel(); super.onDestroy(); } // 첫 번째 TimerTask 를 이용한 방법 class CustomTimer extends TimerTask{ @Override public void run() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:ss"); String currentTime = sdf.format(new Date()); mTvTimer.setText("Timer Class 현재 시간 : " + currentTime); } } }
▼ 다음은 Timer 클래스에 schedule() 함수의 종류와 설명입니다.
schedule(TimerTask task, long delay) 작업을 일정한 시간 이후에 실행한다. 지연 시간은 두 번째 인수인 delay 다.
schedule(TimerTask task, long delay, long period) 작업을 일정한 시간 delay 이후에 실행하며, period 간격마다 작업을 반복한다.
schedule(TimerTask task, Date time) 정해진 시간에 실행한다. 두 번째 인수인 time 이 실행시간이다.
schedule(TimerTask task, Date firstTime, long period) 정해진 시간인 firstTime 에 실행하고, period 간격마다 작업을 반복한다. |
▼ 두 번째는 Runnable 인터페이스 클래스를 상속받아 스레드 클래스를 만듭니다. 그리고 run() 함수안에 Thread.sleep() 를 줘서 일정 시간 반복하도록 합니다.
import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Date; public class TimerActivity extends AppCompatActivity { private Handler mHandler; private CustomRunnable mCustomRunnable; private TextView mTvTimer; private String mCurrentTime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_timer); mTvTimer = (TextView) findViewById(R.id.tv_timer); mCustomRunnable = new CustomRunnable(); mHandler = new Handler(); mHandler.postDelayed(mCustomRunnable, 1000); } @Override protected void onDestroy() { mHandler.removeCallbacks(mCustomRunnable); super.onDestroy(); } class CustomRunnable implements Runnable{ @Override public void run() { try { while(true){ Thread.sleep(1000); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:ss"); mCurrentTime = sdf.format(new Date()); Log.d("Timer", mCurrentTime); } } catch (InterruptedException e) { e.printStackTrace(); } } } }
▼ 구현한 결과는 다음과 같습니다.
'안드로이드 개발' 카테고리의 다른 글
안드로이드 개발 Fragment 와 Activity 의 통신하는 방법 (1) | 2018.08.31 |
---|---|
안드로이드 개발 ArrayList 배열 개체를 JSON 으로 변경하는 방법 (1) | 2018.08.28 |
안드로이드 개발 간단하게 위젯 만드는 방법 (0) | 2018.08.15 |
안드로이드 개발 엑셀 파일 생성 및 데이터 불러오는 방법 (3) | 2018.08.07 |
안드로이드 개발 인터넷 연결(WI-FI, 3G, 4G) 구분해서 연결 확인하는 방법 (0) | 2018.07.02 |
안드로이드 개발 SharedPreferences 객체와 배열 저장을 위한 gson 사용하는 방법 (3) | 2018.04.13 |
안드로이드 개발 에뮬레이터 앱 db 조회 하는 방법 (0) | 2018.04.11 |
안드로이드 개발 Android GPS 정보 알아오기 (63) | 2018.04.07 |