2011-02-08 6 views
1

データをダウンロードしてUIを更新するカスタムAsyncTask(ListDownloadTask)があります。私は活動を開いている間永遠にそれを作りたい。だから、AsyncTaskが仕事をした後、それをスケジュールする必要があります。試行の間に遅延があります。Looping AsyncTask

私はタイマーを使用しようとしましたが、問題はnew ListDownloadTask().execute();がUIスレッドから呼び出されなければならないということです。

今、私は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

サービスを作成し、アクティビティでバインドします。