Какие знаешь варианты выполнения кода в другом потоке кроме корутин

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

Ответ

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

  1. Thread - базовый класс Java:
new Thread(() -> {
    // Фоновый код
}).start();
  1. HandlerThread - поток с Looper для обработки сообщений:
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
  1. ExecutorService - пул потоков из java.util.concurrent:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.execute(() -> {
    // Фоновый код
});
  1. AsyncTask (устарел) - для коротких фоновых операций с обновлением UI:
new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... voids) {
        // Фоновый код
        return null;
    }
}.execute();
  1. IntentService/JobIntentService (устарели) - для фоновых задач, связанных с сервисами.

  2. WorkManager - для отложенных гарантированных фоновых задач:

WorkRequest myWorkRequest = OneTimeWorkRequest.from(MyWorker.class);
WorkManager.getInstance(context).enqueue(myWorkRequest);