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

AsyncTask 멀티스레드 질문할게요

0 추천
new ASyncTask().execute(new String[] { URL, URL2, URL3 });

이런식으로 진행하여서 동시에 데이터를 받아옵니다.

질문1. 어떤 답변을 보니 멀티스레드 같지만 사실은 순차적 싱글스레드 방식으로 동작한다.

이게 사실인가요??

protected String doInBackground(String... urls) {
String output = null;
for (String url : urls) { 
output = getOutputFromUrl(url);
Log.i("TAG", ".................................................."+output);
}
return output;
}

for 문을 돌면서 진행을 하구요..

@Override
	protected void onPostExecute(String result) {
int count = result.length;
showDialog(int+"개의 데이터를 받아왔습니다");
}

 

이런식으로 doinback 이후 처리과정을 쓰구요.

질문2. 저런방법이면 URL1. 2. 3. 에 모두 onpostExecute 가 작동하여

showDialog 가 3번뜨게 됩니다.(겹쳐서)

3개의 Tread 가 모두 종료되면 > 이벤트 발생 (이후 showDialog 실행) 을해서

이름데이터 : 3개

부서데이터 : 10개

기타 데이터 : 0개

이런식으로 한개의 다이얼로그를 띄우고싶은데...

좋은방법이 있다면 부탁드리겠습니다.

모든 Tread 의 종료여부를 판단하는 방법이 필요할거 같은데..잘 생각이 안나네요 ㅠ

 

AND chobo (4,690 포인트) 님이 2013년 12월 4일 질문

1개의 답변

0 추천
코드상으로는 show dialog 가 1번만 떠야 할 것 같습니다만?

doBackground 에서 배열로 전달 받은 url 을 for 로 순차적으로 처리 하고 (single thread)

마지막에 onPostExecute 가 호출 될 테니깐요
aucd29 (218,390 포인트) 님이 2013년 12월 4일 답변
오랫만에 다시 소스를 만져보니 말씀하신대로 작동을 하네요..
이전 코드 저장을 안해놨더니...하지만 과거에 분명 onPostExecute 가 여러번 실행 되는식으로 소스를 짠적이 있어서...다시 소스를 고친뒤에 봐야할거 같네요;;
어시크타스크는 허니콤이후로 동작방식이 변경되었습니다.

이점 구글링 찾아보시면 아실겁니다
...