Зачем надо возвращаться на UI thread, чтобы показать Toast

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

Ответ

Toasts должны показываться только на UI потоке, потому что они взаимодействуют с системным UI. Попытка показать Toast из фонового потока вызовет CalledFromWrongThreadException.

Пример правильного использования:

Handler(Looper.getMainLooper()).post {
    Toast.makeText(context, "Message", Toast.LENGTH_SHORT).show()
}

Или с помощью runOnUiThread в Activity:

runOnUiThread {
    Toast.makeText(this, "Message", Toast.LENGTH_SHORT).show()
}

Все UI операции, включая Toast, должны выполняться на главном потоке, так как Android UI toolkit не является потокобезопасным.