说我在跑步

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 ...)。
  该任务只能执行一次(如果尝试第二次执行,则会引发异常。)
  


根据评论进行编辑:
但是,您可以在onPostExecuteonCancelled方法中再次启动任务。您可以简单地从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/

10-13 01:16