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: