2 xiaoyan 12 xiaoyan_12 于 2012.09.26 14:50 提问

AsyncTask 不能调用onPostExecute()方法

enter code hereAsyncTask类如下:

class Load extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... aurl) {
//do job seconds
//stop at here, and does not run onPostExecute
}
@Override
protected void onPostExecute(String unused) {
super.onPostExecute(unused);
wait = false;
new Load().execute();
}
}

另外一个方法如下:

public void click() {
new Load().execute();
while(wait) {
;
}
}

wait是boolean值。
为什么AsyncTask 不能调用onPostExecute()方法呢?

4个回答

yongyong_21
yongyong_21   2012.09.26 16:19
已采纳
private class AsyncTask extends AsyncTask<Void, Void, Void> {
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected Void doInBackground(Void... params) {

        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            progressDialog.dismiss();

        }
    }

        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            progressDialog.dismiss();

        }
    }
sasuke38
sasuke38   2012.09.28 11:39

你这个代码会死循环的 asynctask是异步 所以你写了new Load().execute();和下面的while循环是异步的 所以哪个先哪个后都不清楚 但是毫无疑问你的task会死循环 因为你在task完成的方法里面再次执行task 但是毫无疑问就是你的click方法早已结束了

mojieke
mojieke   2013.06.24 17:25

你的代码会造成死循环,async主要用于UI与数据交互的异步操作。如果做循环的话,采用简单的定时器就可以

gary16
gary16   2016.02.03 15:38

采用简单的定时器就可以

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!