안드로이드 개발 질문/답변
(글 수 45,052)
허니컴부터는 메인쓰레드에서 네트워크 쓰레드를 하려면 strictMode를 해야 하는데
그래서 Asynctask쓰레드를 써서 하려고 합니다.
근데 동기식으로 쓸거라 문제가 생깁니다
AsyncTask task=new AsyncTask(context);
String result=task가 끝나고 나서 string반환
그림으로 보여드리면
메인쓰레드 | Thread
----------------------
쓰레드 call ---->
작업
작업
작업
대기풀림 <------ string 반환
이렇게 asynctask가 종료 할 때까지 대기하고 리턴값을 받으려고 하는데 방법이 없나요?>
이렇게 되면 asynctask를 안쓰고 다른것을 써야 할텐데..동기적 다운로드니까요..
AsyncTask.get()은 ui Thread를 블락시켜서 progressDialog를 못띄우고..
저렇게 블락을 시키니 progressdialog도 안되서 핸들러에서 값을 받으면
public String getjsonstring(string url){
thread.start();
//핸들러에서 받은 값을 result에 넣고 반환?
return result;
}
핸들러에서 받은 값을 위의 함수에서 반환 하고 싶습니다..
그럴려면 저 함수도 핸들러에 값이 들어왓는지 체크해서 보내 줘야 할텐데... 이런 구조가 가능한지도 ..
요약: 스레드에서 돌린 결과값을 리턴함수에서 받고 싶습니다.(string)
쓰레드 도는동안 프로그레스바띄우면서 대기하고 리턴받는식으로 할 수는 없나요?
(그럴려면 핸들러에서 값받고 리턴식 함수에서 핸들러에서 값을 가져와서 출력 하는식?)
스레드로 결과값받을수 있습니다.
현재 저도 네트워크 통신이 필요한 부분은 따로 스레드로 빼서 callable 구현해서 결과값 수신하네요