我正在使用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方法之后运行。
答案 0 :(得分:3)
我认为你误解了线程模型。
AsyncTask确实首先在后台线程上执行doInBackground,然后在前台线程上执行onPostExecute,并从doInBackground传递结果。
但是,根据你的问题的措辞,听起来你正在从doInBackground开始新的线程。我确信doInBackground确实在onPostExecute启动之前完成,但没有任何东西会导致AsyncTask等待你的其他线程完成。
编辑:
看起来你可以完全跳过AayncTask。您有回调的原因可能是该方法已经异步
但请注意,您只是创建回调,从不使用它。也许你刚离开那部分?