说我在跑
new CommentList().execute(url);
如果我在doInBackground方法中并且我捕获了一个Null值并且在该null值异常中,我尝试再次运行相同的那个:
new CommentList().execute(url);
它会停止运行第一个吗?
我可以这样做:
if (result == null) {
cancel(true);
}
@Override
protected void onCancelled() {
new CommentList().execute(commentlinkurl);
}
基本上我不希望onPostExecute在被取消时运行。
答案 0 :(得分:1)
这不是一个好主意。您不应该在非UI线程上创建新任务(从doInBackground
方法中)。
来自docs:
必须有一些线程规则 然后让这个班级正常工作:
- 必须在UI线程上创建任务实例。
必须在UI线程上调用- execute(Params ...)。
- 不要手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params ...),onProgressUpdate(Progress ...)。
- 任务只能执行一次(如果尝试第二次执行,则会抛出异常。)
根据评论进行修改
但是,您可以在onPostExecute
或onCancelled
方法中再次启动该任务。您可以从doInBackground
简单地向其返回一些特定结果,或者将您的Throwable保存在AsyncTask成员变量中以进一步分析它:
protected void onPostExecute(Something something) {
if(something == null){
// safe to start new execute task here
}
// or
if(mException instanceof TemporaryIssueException){
// safe to start new execute task here
}
}