2015-10-12 34 views
-5

我正在使用AsyncTask,并且在doInBackground方法内部运行线程,是不是AsyncTask的目的是让所有代码在doInBackground内完成执行,然后转到PostExecute?那么为什么我的一些线程在PostExecution中的代码块启动之后运行?在执行PostExecution后,doInBackground中的AsycTask线程开始运行

我该怎么做才能解决这个问题?

public class myActivity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
} 

@Override 
public void onClick(View view) { 
    new myTask().execute(); 
} 


class myTask extends AsyncTask<Void, Void, Void> { 

    Boolean success; 

    @Override 
    protected void onPreExecute() { 

     success = true 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      Callback callback = new Callback() { 
       public void successCallback(String name, Object response) { 
                   } 
       public void errorCallback(String name, error) { 
         success = false;} 
      }; 
     } catch (Exception e) { 
      success = false; 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     if (success == true){ 
       // do something 
     } 
    } 
} 
} 

它在错误回调中,我希望成功字段更改为false。但是,错误回调在postExecute方法之后运行。

+0

发布您的代码。这个问题还不清楚。 – RogueBaneling

+0

该问题收到了否定答复,但我没有得到任何有用的建议 – ktk

回答

3

我认为你误解了线程模型。

的AsyncTask确实先执行doInBackground,在后台线程,然后执行onPostExecute前台线程,它传递从doInBackground结果。

但是,从你的问题的措辞,这听起来像你开始从doInBackground新主题。我确信doInBackground确实在onPostExecute开始之前完成,但没有任何东西会导致AsyncTask等待其他线程完成。

编辑:

它看起来像你可以完全跳过AayncTask。究其原因,你有回调可能是该方法已经是异步

但请注意,您只创建回调,从来没有使用它。也许你只是把那一部分拿出来了?

+0

谢谢!是的,我开始在AsyncTask的doInBackground()中创建一些新线程...我能做些什么来解决这个问题,如何添加代码来演示问题 – ktk

相关问题