说我在跑步
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取消运行。
最佳答案
这不是一个好主意。您不应该在非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
}
}
关于android - 快速AsyncTask doInBackground Q,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9542044/