【发布时间】:2015-03-03 00:52:38
【问题描述】:
考虑以下示例活动:
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("");
我们启动一个运行在 UI 线程之外的 AsyncTask。我们无法预测何时完成。 AsyncTask 的 onPostExecute 方法再次在 UI 线程上运行。
假设AsyncTask 在执行onCreate 方法的code line 2 时完成。
onPostExecute 方法什么时候执行?它是等到onCreate 完成还是会立即执行?
我认为这个问题可以概括为 Java(或至少 Android)如何处理从主线程运行但返回主线程的线程,以及 Java/Android 如何调度两个“竞争”的代码序列以立即进行执行。 因此,如果答案能提供一些一般性的见解,那就太好了。
【问题讨论】:
标签: java android multithreading android-asynctask