Работал ли с многопоточностью в Java

Ответ

Да, работал. В Android многопоточность реализуется через Thread, Runnable, Handler, AsyncTask (устарел), Executors, Coroutines (Kotlin) и RxJava.

Пример с Handler и Thread:

Handler handler = new Handler(Looper.getMainLooper());
new Thread(() -> {
    // Фоновая работа
    handler.post(() -> {
        // Обновление UI
    });
}).start();

Важно:

  • UI-операции только в главном потоке (MainThread).
  • Для сложных задач лучше Coroutines или RxJava.
  • Избегайте утечек памяти (например, Handler с анонимным классом).

Ответ 18+ 🔞

Ёпта, ну ты спросил — я работал, конечно. В Android с многопоточностью, как в дурдоме: вариантов — овердохуища. Можно через старые добрые Thread и Runnable пилить, можно Handler'ом рулить, можно AsyncTask'ом, но он уже, блядь, накрылся медным тазом — устарел конкретно. Ну и, само собой, сейчас все умные на Executors, Coroutines (это в Kotlin) да RxJava перешли.

Вот тебе пример, как раньше, по-старинке, через Handler и Thread колхозили:

Handler handler = new Handler(Looper.getMainLooper());
new Thread(() -> {
    // Тут вся фоновая работёнка, которая UI не трогает
    handler.post(() -> {
        // А вот тут уже в главный поток возвращаемся и UI обновляем
    });
}).start();

А теперь, чувак, слушай сюда, главные правила, без них нихуя не получится:

  • UI-операции — только в главном потоке (MainThread). Это святое. Попробуешь из другого потока кнопку тронуть — будет тебе хиросима и нагасаки в одном флаконе, приложение вылетит, как пробка.
  • Для задач посерьёзнее и поизящнее уже давно Coroutines или RxJava в ходу. С ними асинхронность — как по маслу, а не как в том примере выше, который больше на костыли похож.
  • И самое главное — избегай утечек памяти, ёпта! Особенно с этими Handler'ами, если их анонимным классом объявляешь. Запомнил, как мантру: доверия к этим штукам — ебать ноль. Закроешь активити, а поток с Handler'ом будет втихую жить и на весь девайс память жрать. Пиздец, а не разработка.