2014-09-21 3 views
0

30 초마다 네트워크 통화를하는 업데이트를 정기적으로 확인하고 이에 따라 목록보기를 업데이트하고 싶습니다. 내가 뭘하는지 -포 그라운드에서만 모든 업데이트를 주기적으로 네트워크에 전화하십시오.

private void refreshPeriodically() 
{ 
    final Handler handler = new Handler(); 
    Timer timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() {  
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() {  
        try { 


         new callToMyAsyncTask().execute(context); 

        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 30*1000); //execute in every 30 sec 
} 

그러나 내 목록을 스크롤하는 동안 중지됩니다.

어떻게해야합니까?

답변

0

처리기를 사용하면 안됩니다. handler.post()으로 전화하면 UI 스레드에서 실행되므로 목록이 고정됩니다. 처리기를 사용하지 않고 TimerTask의 실행 방법에 새로운 callToMyAsyncTask을 시작하고 활동이 포어 그라운드가 아닌 경우 timer.cancel()으로 전화 할 수 있습니다.

schedule 대신 scheduleAtFixedRate을 사용해야한다고 생각합니다.

그러나 서비스가 없으면 몇 가지 문제가있을 수 있습니다. 타이머를 취소하면 현재 callToMyAsyncTask이 취소되지 않고 onPostExecute으로 전화를 걸면 더 이상 사용할 수 없습니다. 그러나 나는 추락할지 여부를 모릅니다.