Nik*_*koi 3 android android-asynctask
我正在尝试执行以下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");
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我调用cancel(false)此任务时,onPostExecute应该执行但它永远不会执行.
代码中还有其他问题吗?我已经在SO中查看了很多答案,而且看起来#5 AsyncTask悬挂是正常的,即使你现在只使用一个(如我的情况).
jam*_*mes 10
这里有一大块缺失,你必须要了解.
来自开发人员文档(参见下面的粗体文本):http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean)
尝试取消执行此任务.如果任务已经完成,已经取消或由于某些其他原因无法取消,则此尝试将失败.如果成功,并且在调用cancel时此任务尚未启动,则此任务永远不会运行.如果任务已经启动,则mayInterruptIfRunning参数确定执行此任务的线程是否应该在尝试停止任务时被中断.
调用此方法将导致在doInBackground(Object [])返回后在UI线程上调用onCancelled(Object).调用此方法可确保永远不会调用onPostExecute(Object). 调用此方法后,应定期从doInBackground(Object [])检查isCancelled()返回的值,以尽早完成任务.
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |