gpt4 book ai didi

java - AsyncTask 的 publishProgress 方法是异步的吗?

转载 作者:行者123 更新时间:2023-11-29 07:15:11 25 4
gpt4 key购买 nike

我已经多次使用 AsyncTask - 但我遇到了一个看似简单的问题却让我感到困惑。问题是这样的:

Is publishProgress(Progress... values) supposed to return immediately? In other words, is this method asynchronous?

一些上下文:

我正在尝试判断下面的代码是否正确

  • 每三秒触发一个 HTTP 请求,无论响应如何OR
  • 触发 HTTP 请求,等待响应,然后在触发下一个请求之前 hibernate 三秒钟。

公共(public)类 MyAsyncTask {

@Override
protected void doInBackground(String... params) {
while (mRunning) {
// Call publishProgress
this.publishProgress(makeHttpRequest());

// Sleep for 3 seconds
synchronized (lock) {
try {
lock.wait(3 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

return null;
}

private HttpResponse makeHttpRequest() {
HttpResponse ajaxResponse = null;
Throwable throwable = null;
try {
ajaxResponse = mHttpClient.execute(mHttpGet);
} catch (ClientProtocolException e) {
// Handle exception
} catch (IOException e) {
// Handle exception
} catch (Exception e) {
// Handle exception
}

return ajaxResponse;

}

@Override
protected void onProgressUpdate(HttpResponse... values) {
// Do something with the response
}

最佳答案

你在这里问两件不同的事情:

  • publishProgress() 确实会立即返回,它只是向某个 Handler
  • 发送一条消息
  • publishProgress() 的行为方式无关,您的代码将始终执行 HTTP 请求,等待响应,然后 hibernate 三秒钟。只是像 publishProgress(makeHttpRequest()) 这样的内联方法调用并不意味着 makeHttpRequest() 没有在调用它的地方执行,在你的 doInBackground() 方法。

关于java - AsyncTask 的 publishProgress 方法是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10209497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com