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

Handler not working.

0 추천

안녕하세요.

네트워크 접속 프로그램을 만들고 있고, 접속에 대한 예외처리를 구현하고 있습니다.

네트워크 접속 시도 하는 동안에 일정시간이 지나면 접속을 포기하고 사용자에게 메시지를 보여주려고 하는데요,

이 일정시간이란 부분을 Handler를 이용해서 구현코자 합니다.

 

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 
Handler mHandler = new Handler() {
     public void handleMessage(Message msg) {
          timeout_count++;
          if(timeout_count < 10) {
                Log.e("msg", "timeout count: " + timeout_count);
                mHandler.sendEmptyMessageDelayed(0, 1000);
          }
     }
};
mHandler.sendEmptyMessag(0);
 
/* try to connect Network*/
LiveView live = new LiveView(getApplicationContext());
setContentView(live);
}
 
LiveView에서는 네트워크 접속 시도를 하는 코드가 구현되어있습니다. 저는  핸들러에서 매초마다 일정 횟수동안 LiveView 클래스의 변수를 체크해서 접속여부를 확인하려고 하는데 네트워크 오류로 인해 접속이 지연되는 경우 핸들러가 동작하지 않습니다.
thread의 우선순위와 관련된 문제인가요?? 이런 경우 적절하게 타임아웃을 줄 수 있는 방법은 무엇이 있을까요?
 
 
시베리아수컷타이거 (560 포인트) 님이 2013년 4월 9일 질문

2개의 답변

+1 추천
작성하신 코드상으로 보면 핸들러는 메인 쓰레드에서 동작을 하게 되는데 네트워크 처리 모듈이 네트워킹을 메인쓰레드에서 처리하고 있는게 아닌가 싶습니다. 이 경우 네트워크 모듈에서 블러킹이 발생하면 핸들러의 메시지 룹도 동작하지 않기 때문에 이런 문제가 있는게 아닌가 싶네요. 이 경우 네트워크 처리를 별도의 쓰레드에서 처리하거나 혹은 타임아웃 처리를 별도 쓰레드에서 처리하면 문제가 해결될 것으로 보이네요.
바부팅팅 (420 포인트) 님이 2013년 4월 9일 답변
아.. 아무래도 네트워크 쪽에서 블로킹이 발생해서 핸들러도 제대로 동작하지 않는다는 말씀이 옳은 것 같네요 답변 감사드립니다.
0 추천

Handler 객체를 onCreate내에서 선언해서 그럽니다.

멤버변수로 빼시면 될듯.

hunikey (1,220 포인트) 님이 2013년 4월 9일 답변
멤버변수로 빼봐도....마찬가지더군요.. 그래서 네트워크쪽 모듈에서 오류처리를 추가해버렸습니다.
...