[스레드]RuntimeException: Can’t create handler inside thread Thread[Thread-14,5,main] that has not called Looper.prepare()
다른 폰들에서는 발생하지 않는 오류가 안드로이드 7.1.1이 설치된 샤오미 폰에서 발생한 오류이다.
하도 많이 본 오류라 오류 내용보고 바로 로직 한줄 추가해서 처리 완료하였다. 하지만 운영체제에 따라 서로 다르게 반응하는 이 상황이 답답하다.
2020-06-04 10:49:00.489 7953-8297/dom.test.com E/AndroidRuntime: FATAL EXCEPTION: Thread-14
Process: dom.test.com, PID: 7953
java.lang.RuntimeException: Can't create handler inside thread Thread[Thread-14,5,main] that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:207)
at android.os.Handler.<init>(Handler.java:119)
at android.app.Dialog.<init>(Dialog.java:133)
at android.app.AlertDialog.<init>(AlertDialog.java:204)
at android.app.AlertDialog$Builder.create(AlertDialog.java:1105)
at dom.test.com.IntroActivity.B(:715)
at dom.test.com.IntroActivity.z(:252)
at dom.test.com.IntroActivity.a(:77)
at dom.test.com.IntroActivity$g.run(:584)
at java.lang.Thread.run(Thread.java:919)
■기존 오류가 발생한 코드
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(DELAY_TIME);
} catch (Throwable ex) {
ex.printStackTrace();
}
onMoveToMain(); //메인화면 콜
}
}).start();
private void onMoveToMain() {
if(CellphoneRoutingCheck.checkSu()) { //루팅 폰 체크 로직
stopAlertDialog();
}else
CallMainActivity();
}
■해결방법
스레드 안에서 호출했다면 스레드 안에서 처리를 해야한다. runOnUiThread로 감싸주었다.
private void onMoveToMain() {
if(CellphoneRoutingCheck.checkSu()) {
runOnUiThread(new Runnable() { // 추가함
@Override
public void run() {
stopAlertDialog();
}
});
}else
CallMainActivity();
}