Выполнять код 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
//Вывод
1
4
3
2
Комментариев нет:
Отправить комментарий