728x90
안드로이드 개발 중 Thread 내부에서 Handler를 사용했을 때 다음과 같은 에러 문구가 발생했습니다
2011-01-01 21:36:04.816 18055-18106/com.ftdi.javad2xxdemo E/AndroidRuntime: FATAL EXCEPTION: Thread-4
Process: com.ftdi.javad2xxdemo, PID: 18055
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:204)
at android.os.Handler.<init>(Handler.java:118)
at com.ftdi.javad2xxdemo.DeviceUARTFragment$readThread$1.<init>(DeviceUARTFragment.java:11823)
at com.ftdi.javad2xxdemo.DeviceUARTFragment$readThread.run(DeviceUARTFragment.java:11823)
해당 에러는 Thread run() 함수 내에서 new Handler를 호출했을 경우에 발생했는데
그럼 Thread 내부에서는 Handler를 사용할수 없는 것일까요
아닙니다 생각보다 간단한 방법으로 해당 에러는 해결이 가능합니다
먼저 기존에 생성했던 Handler는 다음과 같습니다
private class Thread extends Thread{
@Override
public void run(){
new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}.sendEmptyMessage(0);
}
}
Thread 내부에서 Handler를 생성했고 에러를 발생시켰는데
문제가 되는 부분이 바로 4번째 줄의 new Handler() 부분입니다.
이 부분을 다음과 같이 수정합니다
private class Thread extends Thread{
@Override
public void run(){
new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
}.sendEmptyMessage(0);
}
}
바로 Handler 생성 인자로 Looper.getMainLooper()를 제공하는 것입니다
이렇게 추가만 해주면 해당 에러는 해결됩니다
728x90
반응형
'안드로이드' 카테고리의 다른 글
[Android] JSON Data 송신 방법 (2) | 2022.08.03 |
---|---|
[Android] 배열을 활용한 객체 등록 (3) | 2022.07.23 |
This version of the Android Support plugin for IntelliJ IDEA 에러 해결 (2) | 2022.05.27 |
안드로이드 foreground delay (2) | 2022.05.12 |
Execution failed for task ':app:mergeDebugNativeLibs' 에러 해결 (5) | 2022.04.19 |
댓글