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

5초마다 리스트뷰를 갱신하고 있는데요

0 추천
protected void onResume() {
  
  this.overridePendingTransition(0, 0);
  super.onResume();
  
  Thread thread = new Thread(new Runnable(){

   @Override
   public void run(){
    while(true)

    {

     try{
      Thread.sleep(5000);
     } catch (Exception e){
      e.printStackTrace();
     }
     
     runOnUiThread(new Runnable(){

      @Override
                public void run() {
                  try{
          //Thread.sleep(1000);
         } catch (Exception e){
          e.printStackTrace();
         }
             
           //리스트1
             try { 
                   //여기서 웹서버로부터 json data 받아옴

            try {
                // 받아온 json데이터를 여기서 파싱해서 Adapter/listview 갱신

            } catch (JSONException e) {
             Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
               
                   
           } catch (MalformedURLException e) { 
                        // 
                  Toast.makeText(MainActivity.this, "MalformedURLException", 0).show();
           } catch (IOException e) { 
                        //  
                  Toast.makeText(MainActivity.this, "IOException", 0).show();
           } // try
                  
             
                      
                }
     });
    }
   }
   
  });
  thread.start();
 }

위 소스가 전체 소스는 아닙니다만, 리스트뷰가 5초마다 웹서버의 json을 받아다가 자동으로 갱신되도록 하는 소스로

현재 작업중인 어플에서 실제로 정상(?)적인 작동 자체는 이뤄지고 있습니다만

한 1분쯤 (자동 갱신 대략 12회) 시간이 지나면 어플이 그냥 먹통으로 정지상태가 되고

클릭도 안되는 현상이 산발적으로 발생하네요.

위 소스 자체에 문제가 있는건가요?

아니면 웹서버와의 통신 과정에서 기기의 무선인터넷 끊김현상일수도 있을까요?

저희 사무실 무선랜이 평상시에도 아주 조금씩 끊김현상이 있긴 하거든요.

 

개님의습성 (2,500 포인트) 님이 2013년 5월 27일 질문
개님의습성님이 2013년 5월 27일 수정

2개의 답변

+1 추천
 
채택된 답변
두가지 문제점이 보입니다만 이게 궁극적으로 해결을 해줄지는  모르겠습니다.

 

첫째로는 ui 쓰레드에서 네트워크 통신작업을 하고 있습니다.

물론 반대로 외부 쓰레드에서 ui 쓰레드를 요청하는게 문제가 될 수 있지만, 일반적인 코드라면

별도의 쓰레드를 생성하여 네트워크 작업을 하도록 하는데 있어서 ui 쓰레드를 사용할 필요는 없어보입니다.

 

둘째로는 5초라는 시간이 네트워크 정상 작동 여부와 관계없이 고정적이라는 겁니다.

즉, 5초대기 -> 요청 -> 응답 ->파싱이 모두 끝난 후 다시 5초 대기를 해야하는데

5초 대기 ->(요청,응답,대기)-> 5초대기 -> (요청,응답,대기) -> 5초 대기

괄호안의 동작은 몇초가 걸리든 5초만 지나면 다시 요청하고 있는게 문제로 보입니다.
블랙넥원 (9,600 포인트) 님이 2013년 5월 27일 답변
개님의습성님이 2013년 5월 28일 채택됨
0 추천
에러가 난거면 에러로그도 같이 올려주시는게 좋습니다
쿨러 (2,790 포인트) 님이 2013년 5월 27일 답변
에러메세지는 Reason: keyDispatchingTimedOut 이렇게 나오는데
검색해보니 어디선가 무한루프가 돌때 발생하는 에러메세지라고 나오긴 하네요.
...