|
안드로이드(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 |

