투케이2K

267. (TWOK/ERROR) [Android] Don't call the esptouch Task at Main(UI) thread directly 메인 스레드 에러 본문

투케이2K 에러관리

267. (TWOK/ERROR) [Android] Don't call the esptouch Task at Main(UI) thread directly 메인 스레드 에러

투케이2K 2024. 8. 25. 15:10

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : [Android] Don't call the esptouch Task at Main(UI) thread directly 메인 스레드 에러

 

[에러 원인]

1. esptouch 스마트 콘피그 라이브러리 사용해

    esptouchTask.setPackageBroadcast 브로드 캐스팅 이후

    esptouchTask.executeForResults 응답 결과 확인 시 메인 스레드 동작 이슈 발생

 

[해결 방법]

1. new Thread() 내에 브로드 캐스팅 및 응답 결과 확인 로직 추가 실시

 

                new Thread(){
                    @Override
                    public void run(){

                        if (esptouchTask != null){

                            // --------------------------------------------------------

                            // TODO [브로드 캐스팅 알림 전파]
                            esptouchTask.setPackageBroadcast(true);

                            // --------------------------------------------------------

                            // TODO [브로드 캐스팅 알림 전파 이벤트 결과 확인]
                            esptouchTask.setEsptouchListener(new IEsptouchListener() {
                                @Override
                                public void onEsptouchResultAdded(IEsptouchResult result) {
                                    S_Log._W_(ACTIVITY_NAME + " : EsptouchTask 브로드 캐스트 연결 상태 콜백 결과 확인", new String[]{ result.toString() });

                                }
                            });

                            // --------------------------------------------------------

                            // TODO [브로드 캐스팅 알림 결과 확인 대기]
                            int expectResultCount = 1;
                            List<IEsptouchResult> results = esptouchTask.executeForResults(expectResultCount);
                            IEsptouchResult first = results.get(0);

                            if (first.isCancelled()){
                                S_Log._E_(ACTIVITY_NAME + " : EsptouchTask 결과 확인 에러", new String[]{ "esptouchTask isCancelled" });

                                // [로직 종료]
                                return;
                            }

                            if (first.isSuc()) {

                                // TODO [ip 주소 확인] : [LOG :: DESCRIPTION :: EsptouchTaskBroadcast :: onNext :: 192.168.0.17]
                                String resultData = first.getInetAddress().getHostAddress();

                            }
                            else {
                                S_Log._E_(ACTIVITY_NAME + " : EsptouchTask 결과 확인 에러", new String[]{ "esptouchTask isSuc false" });

                            }

                            // --------------------------------------------------------

                        }
                        else {
                            S_Log._E_(ACTIVITY_NAME + " : EsptouchTask 브로드 캐스트 에러", new String[]{ "esptouchTask Is Null" });

                        }

                    }
                }.start();

 

반응형
Comments