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

AsyncTask 의 get 메소드 질문

0 추천

아래 코드를 보시면 (아래 코드는 onclick 콜백 메서드의 일부입니다.)

            result = new AsyncTask<String, Integer, String>() {
                @Override
                protected String doInBackground(String... strings) {
                    return sendLoginInfo(strings[0], strings[1]);
                }
            }.execute(IdString, passwordString).get();

"객체 생성 → execute → get → result에 저장" 의 과정이 순차적으로 일어나고 있는데

(질문 1) 레퍼런스를  보니 get 메서드는 작업이 모두 끝날 때까지 기다린 다음 결과를 리턴한다고 나와있습니다. 그러면 doInBackGround 가 끝날 때까지 메인 스레드가 잠시 멈추나요? 잠시 멈춘다면 이는 싱글 쓰레드와 다를 바가 없지 않나요? (첨언하자면 AsyncTask는 네트워크 액세스 시에 사용이 강제돼있어서 썼습니다.)

(질문 2) 작업 시간이 오래 걸리는 경우, get 메서드를 바로 호출하지않고 AsyncTask 인스턴스를 계속 가지고 있다가 나중에 get을 호출하여 결과를 얻어오는 것도 가능한가요?

 

asd (200 포인트) 님이 2014년 7월 19일 질문

1개의 답변

+1 추천
 
채택된 답변

안녕하세요.

1. 네, AsyncTask.get()은 UI thread를 block 합니다.

다음으로 timeout을 설정할 수 는 있지만, 기본적으로 해당 시간동아 UIThread를 block 됩니다.

get(long timeout, TimeUnit unit)

 

2. 나중에 get을 호출하는 것보다 AsyncTaks안에 onPostExecute()를 implement하고 여기서 Handler에 Message를 보내는 것을 추천드립니다.

fanoyong (1,440 포인트) 님이 2014년 7월 19일 답변
asd님이 2014년 7월 19일 채택됨
...