Какие знаешь способы выполнения задач не на главном потоке

«Какие знаешь способы выполнения задач не на главном потоке» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Android есть несколько способов выполнять задачи в фоне:

  1. Thread/Runnable – базовый способ:
new Thread(() -> {
    // Background work
    runOnUiThread(() -> {
        // UI updates
    });
}).start();
  1. Handler/Looper – для отложенных задач:
Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(() -> {
    // Code to run after delay
}, 1000);
  1. AsyncTask (deprecated) – для коротких операций с UI обновлениями.

  2. Kotlin Coroutines – современный подход:

lifecycleScope.launch(Dispatchers.IO) {
    val result = doWork() 
    withContext(Dispatchers.Main) {
        updateUI(result)
    }
}
  1. RxJava – для реактивного программирования:
Observable.fromCallable(() -> heavyTask())
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(result -> updateUI(result));
  1. WorkManager – для отложенных гарантированных задач:
val workRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
WorkManager.getInstance(context).enqueue(workRequest)

Для долгих операций лучше использовать WorkManager или Foreground Service.