본문 바로가기
프로그래밍/Android-Java

[ANDROID] java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

by 채연2 2020. 12. 15.

앱을 실행하던 도중 다음과 같은 에러가 떴다.

E AndroidRuntime: FATAL EXCEPTION: Thread-2656
E AndroidRuntime: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
E AndroidRuntime:        at android.os.Handler.<init>(Handler.java:204)
E AndroidRuntime:        at android.os.Handler.<init>(Handler.java:118)
E AndroidRuntime:        at android.app.Dialog.<init>(Dialog.java:123)
E AndroidRuntime:        at android.app.AlertDialog.<init>(AlertDialog.java:201)
E AndroidRuntime:        at android.app.AlertDialog$Builder.create(AlertDialog.java:1088)
E AndroidRuntime:        at java.lang.Thread.run(Thread.java:764)

 

 

검색을 해보니, 일반 thread 안에 thread를 사용했기 때문이라고 한다.

일반 thread안에서 ui 관련 작업을 위해서는 handler로 처리하는게 좋다고 한다.

참고로... 나는 thread 안에 새로운 thread를 생성했더니 저 에러가 떠서 다시 runOnUIThread를 생성했더니 또 저 에러가 떴다....

 

그래서 수정한 코드는 다음과 같다.

private Handler mHandler = null;
mHandler = new Handler(Looper.getMainLooper());

mHandler.postDelayed(new Runnable() {
	@Override
	public void run() {
		work_ui_test(); // ui관련 작업.
	}
}, 0);

주의할 점은 Handler를 생성할 때 그냥 new Handler() 로 생성하면 안되고, 꼭 mHandler = new Handler(Looper.getMainLooper()); 이렇게 생성해서 ui 관련 작업을 처리해야된다고 한다.

320x100

댓글