В каком потоке вызывается метод onStartCommand у Service

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

Ответ

Метод onStartCommand вызывается в главном (UI) потоке приложения. Это означает, что если в этом методе выполнять долгие операции (сеть, БД и т.д.), они заблокируют интерфейс. Для таких задач нужно использовать отдельные потоки (например, IntentService, JobIntentService, Coroutine/RxJava в сочетании с HandlerThread).

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    // Долгая операция — блокирует UI! Так делать нельзя:
    // Thread.sleep(5000)

    // Решение: запуск в фоне
    lifecycleScope.launch(Dispatchers.IO) {
        // Работаем в фоне
    }
    return START_STICKY
}