gpt4 book ai didi

java - AsyncTask 的 onPostExecuted 是什么时候执行的?

转载 作者:搜寻专家 更新时间:2023-11-01 08:46:28 25 4
gpt4 key购买 nike

考虑以下示例 Activity :

public class ExampleActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);

new ExampleTask().execute("");

// code line 1
// code line 2
// code line 3
// code line 4
}

public class ExampleTask extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... address) {

// some long-running stuff
return "";
}

protected void onPostExecute(String text) {

}
}
}

  new ExampleTask().execute("");

我们启动一个 AsyncTask,它在 UI 线程之外运行。我们无法预测何时完成。 AsyncTaskonPostExecute 方法再次在 UI 线程上运行。

假设 AsyncTask 在执行 onCreate 方法的 code line 2 时完成。onPostExecute方法什么时候执行?它是等到 onCreate 完成还是立即执行?

我认为这个问题可以概括为 Java(或至少 Android)如何处理从主线程运行但又返回主线程的线程,以及 Java/Android 如何调度两个“竞争”的代码序列执行。因此,如果答案能提供一些一般性的见解,那就太好了。

最佳答案

您可以在这里亲眼看到这一切: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/AsyncTask.java

           // that's on the background thread
line #288: return postResult(doInBackground(mParams));

private Result postResult(Result result) {
@SuppressWarnings("unchecked")
Message message = sHandler.obtainMessage(MESSAGE_POST_RESULT,
new AsyncTaskResult<Result>(this, result));
// here it sends the message to the intenral UI handler
message.sendToTarget();
return result;
}

这意味着:

AsyncTask 向它自己的内部 UI 处理程序发送一条消息,这意味着 onPostExecute 只会在 UI 上排队的所有其他内容之后执行 Looper被执行

关于java - AsyncTask 的 onPostExecuted 是什么时候执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27780304/

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