2011-02-08 43 views
1

我有自定义AsyncTask(ListDownloadTask)下载数据和更新UI。我想在活动开放的时候永远做到这一点。所以在AsyncTask完成工作之后,它必须被安排。尝试之间有延迟。循环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(); 
    } 
+0

感谢您的回答。我应该从一开始就使用服务。 – Dmitry 2011-02-09 07:57:16

回答

0

看看这个example这是有点类似你想要做的。尽管如此,使用本地服务可能会更好。

+0

镜像任何人? – Goot 2013-12-15 19:33:50

0

尝试Handler.sendEmptyMessageDelayed或Handler.sendEmptyMessageAtTime。

0

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