我正在尝试执行以下 AsyncTask :
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
应该被执行,但它从未被执行。
是代码有问题还是其他什么问题?
我看了很多答案,似乎有#5AsyncTask
即使您目前只使用一个(如我的情况),闲逛也是正常的。
这里缺少一大块你必须了解的内容。
来自开发人员文档(请参阅下面的粗体文本):http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean)
尝试取消此任务的执行。如果出现以下情况,此尝试将会失败
任务已完成、已取消或无法完成
因其他原因被取消。如果成功,并且此任务已
调用取消时未启动,该任务永远不应该运行。如果
任务已经开始,那么mayInterruptIfRunning参数
确定执行此任务的线程是否应该
被中断以试图停止任务。
调用此方法将导致调用 onCancelled(Object)
doInBackground(Object[]) 返回后在 UI 线程上。呼唤
此方法保证永远不会调用 onPostExecute(Object)。调用该方法后,您应该检查返回的值
isCancelled() 定期从 doInBackground(Object[]) 完成
尽早完成任务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)