안드로이드 개발 질문/답변
(글 수 45,052)
단순해 보이는 내용인데 해결을 못하고 있습니다. ㅠ
간단한 게임앱을 만들고 있는데요.
메인화면(Page_Main)에서
게임시작 버튼(R.id.iv_main_selgame)을 누르면
잠시동안 대기화면(Page_Wait)이 뜨고
처리(HugeProcess)를 한 다음
게임화면(Page_Game)으로 넘어가는 구조입니다.
Button.OnClickListener mClickListener = new Button.OnClickListener() {
public void onClick(View v) {
switch(v.getId()){
case R.id.iv_main_selgame:
Page_Main.setVisibility(View.GONE);
Page_Game.setVisibility(View.GONE);
Page_Wait.setVisibility(View.VISIBLE);
HugeProcess();
Page_Main.setVisibility(View.GONE);
Page_Game.setVisibility(View.VISIBLE);
Page_Wait.setVisibility(View.GONE);
break;
}
}
}그런데,
버튼을 누르면 대기화면(Page_Wait)이 뜨지 않고
바로 처리(HugeProcess)를 하고
게임화면(Page_Game)으로 넘어갑니다.
버튼(R.id.iv_main_selgame)을 클릭했을 때에도
정상적으로 버튼이 클릭되는 것이 보일 때도 있고
클릭된 상태에서 멈추고 다음 프로세스로 넘어가는 경우도 있고
아예 클릭되는 것이 안 보여지고 다음 프로세스로 넘어가는 경우도 있습니다.
이 문제 어떻게 해결해야 하나요?
너무 단순한 문제인 것 같아서 제목도 뭘 써야할지 모르겠고,
검색을 해 보려해도 키워드를 뭘 써야 하는지 모르겠네요. ㅠ




Thread를 사용하셔서 처리(HugeProcess)를 하셔야 합니다.
만약 UIThread에서 시간이 걸리는 작업을 하신다면 시간이 걸리는 작업동안 UI는 변경되지 않고 멈춰 있게 됩니다.
이게 길어지면 ANR(Android not response)가 뜨게 되구요.. 그래서 결론은
UIThread에서는 프로그래스다이얼로그를 띄우시고 처리(HugeProcess)는 쓰레드에서 하시는겁니다.
그담 처리가 끝나면 Handler를 이용하여 처리하시면 됩니다.
아니면 Thread 클래스 대신 Asynctask를 사용하여 처리하는 방법도 있습니다.
하단 링크를 참조하시기 바랍니다.
http://huni.springnote.com/pages/5414657