Thread 는 잘 사용하면 참으로 좋은 유틸리티이지만 잘못 사용하면 에러를 뚜구구궁 띄웁니다.

Thread는 역할을 다하면 자동으로 종료가 되지만 간혹 자동으로 종료가 안되는 경우도 있기 때문에 Thread 종료 시점에는 강제로 종료를 시켜주는것이 좋습니다.

그리고 안드로이드경우는 Thread가 동작중일때 휴대폰에 전화가 온다거나 바깥화면으로 나가게 되어도 Thread는 계속 동작하고 있기 때문에 반드시 onPause 또는 onDestory 메서드에 Thread를 강제종료 또는 멈춤 기능 코드를 넣어야 합니다.

아래는 제가 만든 서바이벌야구게임 앱에서의 일부 코드입니다.


int count;  // 카운트다운 시간 선언

ProgressBar prog= null;  // 프로그래스바 선언

Timer timer = null;  // 타이머 선언

TimerTask timerTask = null;  // TimerTask 선언


//프로그래스bar를 초기화하는 함수

public void initProg(){

prog.setMax(countdown);  // 프로그래스바 시간 최대값 설정

prog.setProgress(countdown); // 현재 프로그래스바 시간 설정  

}

 

public void startTimerThread(){

timerTask = new TimerTask(){ //timerTask는 timer가 일할 내용을 기록하는 객체    

@Override

public void run() {

decreaseBar(); //timer가 동작할 내용을 갖는 함수 호출

            }


};

timer = new Timer(); //timer생성

timer.schedule(timerTask, 0,1000); //timerTask라는 일을 갖는 timer를 0초딜레이로 1000ms마다 실행 즉,                             1000 = 1초

}


public void decreaseBar(){

runOnUiThread( //progressBar는 ui에 해당하므로 runOnUiThread로 컨트롤해야한다

new Runnable() { //thread구동과 마찬가지로 Runnable을 써주고


@Override

public void run() { //run을 해준다. 그러나 일반 thread처럼 .start()를 해줄 필요는 없다 

countdown = prog.getProgress();

if(countdown > 0){

countdown = countdown - 1;

}else if(countdown == 0){

timer.cancel();

Thread.interrupted();  // Thread 강제 종료

}

prog.setProgress(countdown);

}

}

);



Posted by 정윤문경아빠