본문 바로가기
안드로이드

[Android] IllegalThreadStateException 에러 해결

by 코딩히어로 2022. 9. 6.
728x90

1


안드로이드 java언어를 사용해서 개발을 할 때 Thread를 많이 사용하게 되는데

올바른 Thread 사용방법을 지키지 않을 경우 IllegalThreadStateException에러를 많이 만나게 됩니다

발생 원인
new를 통해 생성한 Thread를 start를 통해 실행한 뒤 해당 Thread가 종료되기 전에 start를 다시 호출하는 경우
즉 하나의 Thread에서 start를 두 번 실행할 경우에 문제가 발생

해결방법은 두 가지의 경우에 따라서 달라질 수 있습니다

 

 

단일 Thread 사용 시


Thread를 class내부에 전역으로 선언하고 생성한 뒤에 재사용할 경우

public class MainActivity extends Activity {
	Thread testT = new Thread();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    	testT.start();
        ...
        testT.start();
    }	
    	
}

이렇게 단일 스레드를 이용할 경우에는 Thread.start() 전에 항상 interrupt를 통해

해당 Thread를 체크하는 구문이 필요합니다

public class MainActivity extends Activity {
	Thread testT = new Thread();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    	testT.start();
        ...
        if( testT != null && testT.isAlive() ){
            testT.interrupt();
            testT = null;
            testT.start();
        }
    }	
    	
}

하지만 여러 개발자들이 isAlive함수는 권장하지 않는 함수라고 합니다

왜냐하면 시스템에 의해 무시될 수 있기 때문인데 이 부분은 아직 정확히 실험해보지는 못했습니다

 

 

여러 Thread 사용 시


public class MainActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        Thread testT1 = new Thread();
        testT1.start();
        ...
        Thread testT1 = new Thread();
        testT2.start();
    }	
    	
}

위 방법을 사용할 경우 Thread를 사용할 때마다 new를 통해 생성하기 때문에 start를 두 번 호출할 일이 없습니다.

하지만 Thread 생성이 너무 난무할 경우 프로그래머가 원하는 Thread의 처리 부분에서

서로 꼬이는 경우가 발생할 수 있기 때문에 Thread 간의 실행 순서라든지 교통정리가 반드시 필요합니다

728x90
반응형

댓글