在PostExecution启动后,doInBackground中的AsycTask线程运行

时间:2015-10-12 01:13:36

标签: android android-asynctask

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

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

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方法之后运行。

1 个答案:

答案 0 :(得分:3)

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

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

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

编辑:

看起来你可以完全跳过AayncTask。您有回调的原因可能是该方法已经异步

但请注意,您只是创建回调,从不使用它。也许你刚离开那部分?