快速AsyncTask doInBackground问:

时间:2012-03-02 23:58:15

标签: android

说我在跑

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在被取消时运行。

1 个答案:

答案 0 :(得分:1)

这不是一个好主意。您不应该在非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
    }
}