循环AsyncTask

时间:2011-02-08 19:46:04

标签: android multithreading thread-safety android-asynctask

我有自定义AsyncTask(ListDownloadTask)下载数据和更新UI。我想在活动开始时永远做到这一点。因此,在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();
    }

3 个答案:

答案 0 :(得分:0)

尝试使用Handler.sendEmptyMessageDelayed或Handler.sendEmptyMessageAtTime。

答案 1 :(得分:0)

查看此example有点类似于您想要做的事情。不过,最好也使用本地服务。

答案 2 :(得分:0)

创建服务并在您的活动中绑定它。