Ответ
Да, работал. В 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'ом будет втихую жить и на весь девайс память жрать. Пиздец, а не разработка.