728x90
안드로이드 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
반응형
'안드로이드' 카테고리의 다른 글
[Android] Bitmap 이미지 두 장 합치기 (2) | 2022.09.13 |
---|---|
[Android] 어플 재시작 방법 (6) | 2022.09.12 |
[Android] 안드로이드 PC RS232 사용법 (CD-RK3288-01) (2) | 2022.09.06 |
[Android] FCM 알림 구현 (2) | 2022.08.31 |
[Android] Thread 사용하기 (2) | 2022.08.30 |
댓글