마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

AsyncTask대한 질문입니다.

0 추천

 

public void task() {
        myTask = new AsyncTask<Void, Integer, Void>() {
            @Override
            protected void onPreExecute() {
                run();
            }

            @Override
            protected Void doInBackground(Void... String) {
                while (isCancelled() == false) {
                    if (socket.isConnected() && (cnt == 10)) {
                        try {
                            Log.i("TEST", "꺄르");
                            out.write(loca);
                            out.flush();
                            cnt = 0;
                        } catch (Exception ex) {
                            Log.i("TEST", "꺄르륵");
                        }
                    }
                }
                return null;
            }
        };
    }

    public void run() {
        try {
            socket = new Socket(SERVER_IP, SERVER_PORT);
            output = new DataOutputStream(socket.getOutputStream());
            out = new OutputStreamWriter(socket.getOutputStream(), "EUC-KR");

            while (socket != null) {
                if (socket.isConnected()) {
                    out.write(loca);
                    out.flush();
                    break;
                }
            }

        } catch (Exception ex) {
            this.finish();

        }
    }

 

여기서 지금 앱플리케이션은 꺼지고 빽그라운드에서 꺄르 > 꺄르륵 으로 지속적으로 돌고있네요

어떻게 해야할까요?

익명사용자 님이 2015년 9월 22일 질문

2개의 답변

+1 추천
 
채택된 답변
네트워크 작업은 별도의 스레드를 만들어 작업하셔야 합니다.

 

AsyncTask를 사용하는 것은 맞는데

AsyncTask 에서 별로의 스레드로 동작하는 부분은

doInBackground 메소드 부분입니다.

 

그런데 님은 UI 스레드에서 동작하는 onPreExecute 메서드에서 네트워크 작업을 돌리니까

ANR이 발생하는 것 입니다.

 

네트워크 작업을 doInBackground 메소드 안에서 실행되게 하세요.
원조안드로이드 (58,190 포인트) 님이 2015년 9월 22일 답변
0 추천
줄번호 넣어주세요.
로그캣에 어디서 뭐때문에 죽는건지 다 적혀있습니다. 예외처리한 부분에서 로그만 찍지 아무 해결도 안하고 있으니 당연히 계속 돌뿐이구요
Jinthree (8,980 포인트) 님이 2015년 9월 22일 답변
...