2011-02-08 60 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

創建一個服務並將其綁定到您的活動中。