У меня есть пользовательский AsyncTask
(ListDownloadTask), который загружает данные и обновляет пользовательский интерфейс. Я хочу сделать это навсегда, пока активность открыта. Поэтому после того, как AsyncTask выполнил работу, она должна быть запланирована. Есть задержки между попытками.
Я пытался использовать таймер, но проблема в том, что 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();
}