Страницы

Поиск по вопросам

четверг, 11 октября 2018 г.

В чем различия выполнения кода в UI-потоке

Выполнять код UI-потоке в Android-приложении можно разными способами:
MainActivity.this.runOnUiThread(new Runnable(){ public void run(){ Log.d("UI thread", "I am the UI thread"); } });
или
MainActivity.this.myView.post(new Runnable(){ public void run(){ Log.d("UI thread", "I am the UI thread"); } });
или
private class BackgroundTask extends AsyncTask { protected void onPostExecute(Bitmap result) { Log.d("UI thread", "I am the UI thread"); } }
В чем различия между этими способами?


Ответ

Разница в последовательности выполнения:

1) Выполнится мгновенно если запущено из UiThread, и будет поставлено в очередь на выполнение если запущено из параллельного потока.
//Пример для UiThread Log.e("_","1"); MainActivity.this.runOnUiThread(() -> Log.e("_","2")}}); Log.e("_","3");
//Вывод 1 2 3

2) Всегда будет поставлено в очередь на выполнение (не зависимо от потока).
//Пример Log.e("_","1"); MainActivity.this.myView.post(() -> Log.e("_","2")}}); Log.e("_","3");
//Вывод 1 3 2

3) Сначала запустит отдельный поток, а после его завершения поставит в очередь на выполнение.
//Пример Log.e("_","1"); new AsyncTask(){ @Override protected void onPostExecute(Void aVoid) { Log.e("_","2"); } }.equals(); MainActivity.this.myView.post(() -> Log.e("_","3")}}); Log.e("_","4");
//Вывод 1 4 3 2

Комментариев нет:

Отправить комментарий