Страницы

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

четверг, 5 декабря 2019 г.

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

#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

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

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