[英]Looping Async Tasks in Android - whats the good way?
我想每隔幾分鍾從網絡服務器解析數據到我的Android設備。 我已經實現了一個AsyncTask,它正在OnPostExecute()方法中更新我的UI。
我沒有找到重復AsyncTask的好方法。 我嘗試過Handler,Threads和ExecutorServices ...我沒有設法在數據更新后重復Asynctask。 關於這個主題有數百個主題,每個主題都有不同的結果。
我的源代碼在Handler嘗試重新啟動runnable后返回一些IllegalStateException。
12-15 21:15:36.909: E/AndroidRuntime(28256): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
來源(onCreate()...):
....
....
websitesAsyncTask = new WebsitesAsyncTask();
mHandler = new Handler();
refreshWebsitesRunnable = new Runnable() {
@Override
public void run() {
// mHandler.removeCallbacks(refreshWebsitesRunnable);
if (mThreadExecutor == null || mThreadExecutor.isShutdown()) {
mThreadExecutor = Executors.newSingleThreadExecutor();
}
// TODO Auto-generated method stub
Log.d("scheduled task",
"---Scheduled Task: Refresh Websites");
if (websitesAsyncTask.getStatus() != Status.RUNNING) {
// websitesAsyncTask.cancel(true);
websitesAsyncTask
.executeOnExecutor(mThreadExecutor);
}
mHandler.postDelayed(refreshWebsitesRunnable, 10000);
}
};
startRepeatingTask();
}
如何在不阻止UI且不編寫臟代碼的情況下重復我的任務?
AsyncTask實例只能調用一次。 要進行第二次調用,您需要創建一個新實例。
有一種方法,你需要一個AsyncTask
doInBackground(...){
while(Condition){
//do your stuff
//...
Thread.sleep(5000)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.