2011-02-08 4 views
1

데이터를 다운로드하고 UI를 업데이트하는 사용자 지정 AsyncTask (ListDownloadTask)이 있습니다. 나는 활동이 열리는 동안 그것을 영원히 만들고 싶다. AsyncTask 작업을 수행 한 후에는 일정을 잡아야합니다. 시도 사이에는 지연이 있습니다.Looping AsyncTask

타이머를 사용하려고했지만 UI 스레드에서 new ListDownloadTask().execute();을 호출해야합니다.

이제 Handler에 대한 메시지를 생성하는 타이머가 있습니다. 그것은 저에게보기 흉한 것처럼 보입니다. 모범 사례는 무엇입니까?

@Override 
public void onCreate(Bundle savedInstanceState) { 
// ... 
    new ListDownloadTask().execute(); 
} 

private static final long DOWNLOAD_UPDATES_DELAY = 5 * 1000; 
private final Timer mUpdatesDownloaderTimer = new Timer(true); 

Handler mDownloadTrigger = new Handler(new Handler.Callback() { 
    public boolean handleMessage(Message message) { 
     new ListDownloadTask().execute(); 
     return true; 
    } 
}); 

private void scheduleUpdatesDownload() { 
    mUpdatesDownloaderTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      mDownloadTrigger.sendEmptyMessage(0); 
     } 
    }, DOWNLOAD_UPDATES_DELAY); 
} 

private class ListDownloadTask extends AsyncTask<Long, String, Integer> { 
    @Override 
    protected void onPostExecute(Integer result) { 
     //... 
     scheduleUpdatesDownload(); 
    } 
+0

답변 해 주셔서 감사합니다. 나는 처음부터 봉사를 사용해야한다. – Dmitry

답변

0

체크 아웃이 example은 (는) 원하는 것을 약간 닮았습니다. 로컬 서비스를 사용하는 것이 더 나을 수도 있습니다.

+0

누군가를 미러링 하시겠습니까? – Goot

0

는 Handler.sendEmptyMessageDelayed 또는 Handler.sendEmptyMessageAtTime를 사용해보십시오.

0

서비스를 만들고 활동에 바인딩하십시오.