Класс CalledFromWrongThreadException
Класс CalledFromWrongThreadException
защищает интерфейс Android:
рисовать и менять View можно только
с потока, где крутится looper activity.
Если из фонового потока вызвать
setContent или TextView.setText,
framework бросит это исключение.
Исправление - runOnUiThread
или корутина с Main dispatcher.
Пример
Давайте безопасно покажем текст из onCreate:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text(text = "12345")
}
}
}
Вызов setContent из onCreate идёт
с main thread. Если тот же код запустить
из Thread { }, система бросит
CalledFromWrongThreadException.
Смотрите также
-
класс
NetworkOnMainThreadException,
сеть на главном потоке -
функция
setContent,
которую вызывают только с UI thread -
функция
LaunchedEffect,
для работы с UI после suspend -
метод
onCreate,
где поток уже main