Looping AsyncTask - PullRequest
       4

Looping AsyncTask

1 голос
/ 08 февраля 2011

У меня есть пользовательский 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();
    }

Ответы [ 3 ]

0 голосов
/ 08 февраля 2011

Посмотрите на этот пример , который похож на то, что вы хотите сделать. Хотя, возможно, лучше использовать локальную службу.

0 голосов
/ 08 февраля 2011

Создайте службу и привяжите ее в своей деятельности.

0 голосов
/ 08 февраля 2011

Попробуйте Handler.sendEmptyMessageDelayed или Handler.sendEmptyMessageAtTime.

...