【发布时间】:2013-08-07 07:31:09
【问题描述】:
我有一个 AsyncTask 如下:
private class SearchTask extends AsyncTask<Object, Object, Object> {
@Override
protected void onPreExecute() {
super.onPreExecute();
System.out.println("Start");
}
@Override
protected Object doInBackground(Object... urls) {
SearchFunction();
return null;
}
@Override
protected void onPostExecute(Object result) {
System.out.println("End");
}
}
还有一个定时器如下:
private Handler handler = new Handler();
private Runnable updateTimer = new Runnable() {
public void run() {
System.out.println("===status===");
System.out.println(SearchTask.getStatus());
SearchTask.cancel(true);
handler.postDelayed(updateTimer, 3000);
}
};
并调用AsyncTask和定时器代码如下:
handler.postDelayed(updateTimer, 3000);
SearchTask SearchTask = new SearchTask();
SearchTask.execute();
doInBackground 中的 SearchFunction 方法可能会花费超过 3 秒,所以添加一个计时器。
但是在updateTimer第一次调用并取消AsyncTask时,doInBackground一直在运行,直到完成,然后取消onPostExecute。
如何直接取消 doInBackground?
【问题讨论】:
-
你的意思是说你需要在 3 秒后取消异步任务?
-
更改 SearchTask 的对象名称...我很惊讶您的编辑器允许具有相同大小写的对象使用相同的类名称..