データをダウンロードして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();
}
回答ありがとうございます。私は非常に始めからサービスを利用すべきです。 – Dmitry