안드로이드 개발 질문/답변
(글 수 45,052)
파싱할때 시간이 걸려,
그 부분을 프로그레스 다이얼로그로 대기시켜 구현중입니다.
onCreate() {
A_thread();
}
/** 처음에 기본 파싱 **/
A_thread() {
XML parsing
A_Handler.setEmptyMessage(0);
}
A_Handler() {
리스트 Adapter, 뷰에 파싱했던걸 셋팅함;
더 보기 버튼 클릭 이벤트
}
/** 리스트 뷰 맨 밑에 [더보기]버튼 클릭시에 더 XML 파싱함 **/
B_thread() {
더보기 XML 파싱
A_Handler.sendEmptyMessage(0);
}
B_Handler() {
어댑터.setNotifiyDataChaged();
}이렇게 되어있습니다.
그런데 이게 효율적인가요??
스레드1과 2는 XML파싱하는 방법이 달라서
분리 되어있다 칠께요
그런데 onCreate() 내에서
뷰 또는 [더 보기] 버튼리스너를 A_thread 메소드 이후에
하려고 하면 다이얼로그가 종료되고 에러가 납니다.
onCreate() {
스레드1
보기 버튼 클릭 이벤트 처리 (내용은 B_thread 메소드를 실행함);
}
뭐 대충 하자면 이런식으로 하면 에러가 납니다.
그래서 이벤트처리와 관련된건 A_Handler 에서 모두다 처리를 했는데
소스가 굉장히 지저분하고 가시성도 떨어지고
-.- 개인적으로 스레드를 싫어합니다 ㅠㅠ
제가 뭔가 잘못하고 있는거지요??




쓰래드 이후의 처리는 쓰래드가 완전히 종료된 다음에 처리되어야 한다는것인데요..
이부분에 문제가 있을 것으로 사료됩니다.
쓰래드라는건 본 쓰래드와 다르게 다른 쓰래드를 할당해서 처리하기 때문에 기본적으로 본래의 쓰래드와의 동기화에서 문제가 생깁니다.. 백그라운드에서 다른 쓰래드가 돈다는 개념으로 생각하시고 코딩하는 것이 좋을 겁니다..
따라서 쓰래드 실행 이후가 되려면 같은 쓰래드 내부에서 순차적으로 처리하는 방법이 첫번째고..
두번째는 다른 쓰래드를 생성시켜서 대기상태로 만들고 첫번째 쓰래드에서 결과값을 던져주면 받아서 실행하는 방법이 두번째 방법이 되겠네요..
프로그래스 바 같은걸로 대기상태를 표시하고 파싱을 하는 경우엔 구지 쓰래드를 사용할 필요는 없을 수 있습니다..
AsyncTask를 통하여 파싱하는 동안에 순차적 처리를 하면서 프로그래스를 돌려준다면 쓰래드 없이도 해결이 가능할것같네요..
(물론 이것을 쓰면 내부적으로 쓰래드를 생성해서 관리하게 될 테지만.. 직접 작성할 필요가 없어진다는 것입니다..)
새벽에 둘러보다 다는거라 두서가 없네요.. 도움이 되길바랍니다.