我正在尝试执行以下AsyncTask:
当我在这个任务上调用
代码有什么问题还是其他原因呢?我看了很多SO中的答案,似乎即使你只使用一个#5
private class TimeUpdateTask extends AsyncTask<List<mObject>, Integer, Void> {
@Override
protected Void doInBackground(List<mObject>... params) {
mObject o;
int i;
int numChecked = 0;
List<mObject> mObjects = params[0];
while(true)
{
if (isCancelled())
{
Log.w("TAG", "task interrumped");
return null;
}
for (i=0 ; i < mObjects.size() ; i++)
{
o = mObjects.get(i);
if (!o.isChecked())
{
o.calculateProgress();
if (o.isChecked())
{
numChecked++;
}
}
}
publishProgress(numChecked);
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
protected void onProgressUpdate(Integer... param){
int progressCompleted = param[0];
((ArrayAdapter<mObject>) EventListView.this.EventView.getAdapter()).notifyDataSetChanged();
mMain.setProgressBarCompleted(progressCompleted);
}
/*This should execute*/
@Override
protected void onPostExecute(Void result) {
Log.d("TAG","End onPostExecute");
}
}
当我在这个任务上调用
cancel(false)
时,onPostExecute
应该被执行,但它从未被执行。代码有什么问题还是其他原因呢?我看了很多SO中的答案,似乎即使你只使用一个#5
AsyncTask
(就像我的情况一样),它还是存在的。
while(true)
。尝试使用while(!isCancelled())
- 这更有意义。 - Squonk