Ответ
Поток (Thread) — это наименьшая единица выполнения в процессе. В Android основной поток (UI Thread) отвечает за обновление интерфейса, а фоновые потоки используются для выполнения долгих операций (сеть, БД, вычисления), чтобы не блокировать UI.
Пример создания потока:
Thread {
// Фоновая работа
runOnUiThread {
// Обновление UI из основного потока
}
}.start()
⚠️ Важно:
- Нельзя обновлять UI не из основного потока.
- Для работы с потоками в Android лучше использовать
Coroutines,RxJavaилиAsyncTask(deprecated).
Ответ 18+ 🔞
Да ты посмотри, какой умник решил про потоки рассказать! Ну ладно, слушай сюда, раз уж начал.
Представь себе, что твоё приложение — это такой забегаловка. Основной поток, он же UI Thread — это единственный официант на весь зал. Его работа — разносить заказы (обновлять интерфейс) и улыбаться клиентам (реагировать на тапы). Быстрый, шустрый, всем лицом крутит.
А теперь, если этому официанту дать задачу «сходить нахуй в соседний квартал за колбасой для пиццы» (скачать JSON размером в овердохуища), что будет? Правильно, пока он бегает, весь зал будет сидеть с пустыми столами, клиенты охуеют от ожидания, а приложение крашнется с ANR. Вот это и есть блокировка UI.
Поэтому для всей этой долбанной тяжёлой работы — сети, базы данных, вычисления, от которых процессор потеет как лошадь — мы нанимаем фоновых работяг. Это и есть фоновые потоки (Thread). Они где-то там на кухне или на складе ебутся с задачами, а наш главный официант-UI продолжает работать с клиентами.
Вот самый простой, дедовский способ такого работягу нанять:
Thread {
// Тут делаем фоневую работу. Скачиваем, парсим, в БД пишем.
// Делаем всё, от чего UI потрёт мозги.
// Но! Трогать кнопки, текствью и прочую UI-хероту отсюда НИЗЗЯ! Вылетит.
runOnUiThread {
// А вот это уже магия! Эта команда говорит:
// "Эй, главный поток, оторви свою жопу от стула и выполни то, что в фигурных скобках".
// И вот тут уже можно безопасно сказать textView.text = "Всё, готово, чувак!".
}
}.start() // Не забудь стартануть, а то работяга так и будет сидеть на хуе, ничего не делая.
⚠️ Важный вопросик, ёпта:
- Нельзя обновлять UI не из основного потока. Это железное правило. Попробуй из фонового потока текст в TextView запихнуть — получишь
CalledFromWrongThreadException. Это как если бы повар из кухни выбежал и начал сам заказы разносить — всё, бардак, система рухнет. - Раньше все этим
ThreadиAsyncTask(царство ему небесное, deprecated он теперь) баловались. Но сейчас-то, в наше время, это выглядит как приехать на стройку на осле. Для работы с потоками в Android есть куда более адекватные инструменты — Coroutines или RxJava. Они как управляемая бригада с прорабом: меньше геморроя, всё организованно, утечек памяти нет, и отмену задач сделать легко. АThread— это такой одинокий гастарбайтер, за которым ещё и прибраться нужно, а то память сожрёт.
Короче, суть в чём: главный поток — для быстрого UI, фоновые — для всей тягомотины. Смешивать — низя. А инструменты выбирай современные, не будь бумером.