AsyncTask 不调用 onPostExecute()

bri*_*ian 1 android asynchronous android-asynctask

我正在写一个AsyncTask如下:

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();
}
}
Run Code Online (Sandbox Code Playgroud)

另一种方法如下:

public void click() {
new Load().execute();
while(wait) {
;
}
}
Run Code Online (Sandbox Code Playgroud)

等待是一个全局布尔值。

Ted*_*opp 5

这段代码:

public void click() {
new Load().execute();
while(wait) {
;
}
}
Run Code Online (Sandbox Code Playgroud)

将在任务执行时阻塞 UI 线程。这与在前台运行后台任务一样糟糕,应该会导致应用程序无响应 (ANR) 错误。请不要这样做。

请注意,AsyncTask.onPostExecute()如果任务被取消,则不会调用。如果doInBackground抛出异常,它也不会被调用。无论发生了什么,都doInBackground可能导致这种情况。