我想每隔几分钟从网络服务器解析数据到我的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且不编写脏代码的情况下重复我的任务?
答案 0 :(得分:2)
AsyncTask实例只能调用一次。要进行第二次调用,您需要创建一个新实例。
答案 1 :(得分:0)
有一种方法,你实际上需要一个AsyncTask
doInBackground(...){
while(Condition){
//do your stuff
//...
Thread.sleep(5000)
}
}