Какие знаешь методы чтобы гарантировано вызвать метод класса на main потоке

«Какие знаешь методы чтобы гарантировано вызвать метод класса на main потоке» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для вызова метода на главном потоке в Android можно использовать:

  1. Handler с Looper.getMainLooper()
new Handler(Looper.getMainLooper()).post(() -> {
    // Код выполнится на главном потоке
});
  1. View.post() (если есть доступ к View)
view.post(() -> {
    // Код выполнится на главном потоке
});
  1. Activity.runOnUiThread()
activity.runOnUiThread(() -> {
    // Код выполнится на главном потоке
});
  1. RxJava
Observable.just(1)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(/* обработка на UI */);
  1. Kotlin Coroutines
CoroutineScope(Dispatchers.Main).launch {
    // Код выполнится на главном потоке
}

Все методы гарантируют выполнение на главном потоке, но имеют разный контекст использования. Handler - универсальный, View.post() удобен при работе с View, runOnUiThread требует Activity.