Android

[스레드]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();
    }

 

Leave a Reply

error: Content is protected !!