Рассмотрим следующий пример: активностьКогда выполняется onPostExecuted из AsyncTask?
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
отходящей от потока пользовательского интерфейса. Мы не можем предсказать, когда он будет закончен. Метод AsyncTask
onPostExecute
снова запускается в потоке пользовательского интерфейса.
Скажем, AsyncTask
выполнен в то время как code line 2
метода onCreate
выполняется. Когда будет выполняться метод onPostExecute? Подождите, пока не будет выполнено onCreate
или будет выполнено немедленно?
Я думаю, что этот вопрос можно обобщить на то, как Java (или, по крайней мере, Android) обрабатывает потоки, которые выходят из основного потока, но возвращаются к основному потоку и как Java/Android планирует две последовательности кода, которые «конкурируют» за немедленное изъятие. Таким образом, было бы неплохо, если бы ответ дал бы небольшую общую информацию.
Это описывает, когда onPostExecute вызывается с уважением к жизненному циклу AsyncTask, но совсем не по отношению к потоку пользовательского интерфейса. – FWeigl
См. Обновление. – BeingMIAkashs
Ожидает завершения операцииПодтверждение –