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

안드로이드 화면 로딩시 네트워크 Thread 여러개를 순차적으로 돌리려고합니다.

0 추천
처음 앱을 실행 시에 메인 화면으로 시작이 되고

모바일 서버 JSP 로부터 값을 전달받아 로그인 하는데요.

정보가 없을 경우 [로그인화면] 있으면 [자동로그인화면]으로 2가지로 분기됩니다.

 

메인 화면 액티비티

                   -로그인 창(아이디,패스워드) 화면 액티비티

                   -자동 로그인 화면 액티비티

 

각 화면 마다 ProgressBar를 띄워서

진행상태를 메시지로 변경해가면서 보여주고 있으며

 

과거 Acynctask 를 사용했었는데요. 특정 API LEVEL인지 기기에 따라서 안 돌아가길래

현재는 전부 Thread 방식으로 변경했습니다.

 

여기서 문제가 발생하는데요(본론으로들어가자면,,)

 

Join() 함수를 사용해서

통신 Thread  여러개를 순차적으로 실행하는 데요.

이게 특정 폰, (기기마다 또 안되는게 잇고 되는게 있음) 에서 특정 Thread 가 지멋대로 제대로 통신 동작을 안하고

넘어가 버립니다.

순차적으로 완료되서 넘어가야되는데요.

Join()함수로만은 뭔가 제어가 안되는거 같습니다.

한 액티비티당 통신하는 Thread가 3개,4개, 3개 이런식으로 됩니다.

 

1번 쓰레드 통신 후  정상 - 3번 Thread 실행   - 4 번 Thread 실행

                                ㄴ비정상 - 2번 Thread 실행   - 4번 Thread 실행

Thread 끼리 통신 결과에 따라서 다르게 분기하는데

이걸 관리하기도 어렵네요..

쉽게 관리하는 방법이나 액티비티,, UI Thread 지식을 제대로 공부할 수 있는 블로그 같은걸 알려주셨으면합니다.
kimdaesuk (140 포인트) 님이 2014년 5월 9일 질문

2개의 답변

+3 추천
단순히 UI쓰레드에서 ProgressDialog 핸들링을 위해서 쓰레드를 분리하신거 같은데요.

저렇게 통신부분을 쓰레드 단위로 쪼갤게 아니라 하나의 쓰레드로 구성하시고, UI작업에 대한 부분이라던지, 중간중간에 필요한 작업은 핸들러를 통해서 처리하심이 좋을 듯 합니다.
dante2k (8,390 포인트) 님이 2014년 5월 9일 답변
이분말씀대로 스레드를 1개로 줄이고, 핸들러 쓰세요.
+2 추천
이 경우는 1 개의 스레드 내에서 1, 2, 3, 4 method 를 실행하면 되는데 굳이 왜 스레드를 4개 만들어서 쓰는건가요?
aucd29 (218,390 포인트) 님이 2014년 5월 9일 답변
...