【问题标题】:Looping AsyncTask循环异步任务
【发布时间】:2011-02-08 19:46:04
【问题描述】:

我有自定义的 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();
    }

【问题讨论】:

  • 感谢您的回答。我应该从一开始就使用服务。

标签: android multithreading thread-safety android-asynctask


【解决方案1】:

看看这个example,这有点类似于你想做的事情。不过,使用本地服务可能会更好。

【讨论】:

    【解决方案2】:

    尝试 Handler.sendEmptyMessageDelayed 或 Handler.sendEmptyMessageAtTime。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-09-30
        • 2014-04-19
        • 1970-01-01
        • 2023-03-16
        • 2018-04-10
        • 2020-03-13
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多