Main Thread (главный поток, UI-поток) — это основной поток выполнения в Android-приложении, который:
// Проверка, выполняется ли код в main thread
if (Looper.myLooper() == Looper.getMainLooper()) {
// Это главный поток
}
textView.text = "Обновленный текст"
button.isEnabled = false
recyclerView.smoothScrollToPosition(0)
Работа с жизненными циклами:
Вызовы методов, требующие Main Thread:
Долгие операции (более 5-16 мс):
Блокирующие операции:
Сложные вычисления:
lifecycleScope.launch {
val data = withContext(Dispatchers.IO) { // фоновый поток
repository.loadData() // долгая операция
}
textView.text = data // автоматически возвращается в main thread
}
Observable.fromCallable { /* долгая операция */ }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result -> updateUI(result) }
private class MyTask extends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... voids) {
return "Результат"; // в фоне
}
protected void onPostExecute(String result) {
textView.setText(result); // в UI потоке
}
}
view.post(() -> {
// Этот код выполнится в main thread
view.setVisibility(View.VISIBLE);
});
Main Thread — критически важный поток в Android, отвечающий за UI и взаимодействие с пользователем. Долгие и блокирующие операции должны выполняться в фоновых потоках, а результаты передаваться обратно для обновления интерфейса. Соблюдение этого правила — основа плавного и отзывчивого интерфейса.