#java #android
Выполнять код 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
Разница в последовательности выполнения: 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
Комментариев нет:
Отправить комментарий