【发布时间】: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