IllegalThreadStateException 이 발생하고 앱이 죽는 경우가 생겼습니다. 원인과 해결방법에 대해서 정리합니다.         1. 원인 Thread 객체가 요청된 작업에 대해 적절하지 않은 경우 발생한다고 정의되어있습니다. 대표...

[안드로이드] IllegalThreadStateException 해결방법

 

IllegalThreadStateException 이 발생하고 앱이 죽는 경우가 생겼습니다.

원인과 해결방법에 대해서 정리합니다.

 

 

 

 

1. 원인

Thread 객체가 요청된 작업에 대해 적절하지 않은 경우 발생한다고 정의되어있습니다.

대표적인 예로 아래와 같이 정의된 Thread 객체를 두 번 호출하는 경우 입니다.

Thread thread = new Thread(() -> {
Log.d("Thread", "thread start!");
});

thread.start();
thread.start();

 

 

 

2. 해결 방법

동일한 Thread 객체로 호출하지 않으면 됩니다.

new Thread(() -> {
Log.d("Thread", "thread run!");
}).start();

new Thread(() -> {
Log.d("Thread", "thread run!");
}).start();

new Thread(() -> {
Log.d("Thread", "thread run!");
}).start();

 

그런데 만약 Thread  동작이 내용도 동일하고 복잡하다고 한다면, 

사용할 때마다 위와 같은 방법은 비효율적입니다.

그렇기 때문에 전역변수를 정의해주고 호출할 때마다 안전하게 thread 실행시키는 함수를 사용하는 방법도 있습니다.

Thread thread = null;
public void startTestThread() {
if (thread != null) {
thread.interrupt();
thread = null;
}

thread = new Thread(() -> {
Log.d("Thread", "thread run!");
});
thread.start();
}
startTestThread();
startTestThread();
startTestThread();

 

 

 

[참고자료]

android developer : IllegalThreadStateException

 

 

0 comments: