안드로이드 개발

java.lang.IllegalThreadStateException 해결 법

피커 2023. 5. 4. 15:02
728x90
반응형

안드로이드 개발시 java.lang.IllegalThreadStateException 라는 에러를 마주치고는 한다.

thread 를 여러번 호출할때 주로 발생하게 되는데 아래 예제 코드를 참고하면 됩니다.

해결방법은 쉽지만 어려운 케이스도 존재합니다.

여러분의 에러가 쉬운 케이스이길 바래봅니다.

 

1. 오류 코드 (에러)

   -. 아래 코드를 보면 onCreate에서 thread 를 만들고, start 함수를 이용해 2번 호출하고 있습니다.

      이렇게 2번 연달아 thread를 호출하게되면 에러가 발생하게 됩니다.

2. 오류 로그

  -. 아래처럼 java.lang.IllegalThreadStateException 익셉션을 안드로이드 스튜디오에서 출력하게 됩니다.

3. 해결 방법

  -. 해결법은 아주 심플하게 한번만 start 하면 해결이 됩니다.

 

*. 에러 로그 원문

FATAL EXCEPTION: main
Process: com.picker.javaexception, PID: 26349
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.picker.javaexception/com.picker.javaexception.MainActivity}: java.lang.IllegalThreadStateException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at co m.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at co m.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
Caused by: java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:869)
at com.picker.javaexception.MainActivity.onCreate(MainActivity.java:27)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7839) 
at java.lang.reflect.Method.invoke(Native Method) 
at co m.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)  
at co m.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)  

*. 관련 백서 원문

Thrown to indicate that a thread is not in an appropriate state for the requested operation. See, for example, the suspend and resume methods in class Thread.

Summary

Public constructors
IllegalThreadStateException()Constructs an IllegalThreadStateException with no detail message.
IllegalThreadStateException(String s)Constructs an IllegalThreadStateException with the specified detail message.
Inherited methods
From class java.lang.Throwable
From class java.lang.Object

Public constructors

IllegalThreadStateException

Added in API level 1
 
public IllegalThreadStateException ()

Constructs an IllegalThreadStateException with no detail message.

IllegalThreadStateException

Added in API level 1
 
public IllegalThreadStateException (String s)

Constructs an IllegalThreadStateException with the specified detail message.

Parameters
s String: the detail message.
반응형