На каком потоке работает BroadcastReceiver

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

Ответ

BroadcastReceiver по умолчанию работает в основном потоке (UI-потоке). Это означает, что если в onReceive() выполняется долгая операция, UI может зависнуть.

Решение:

  • Для длительных задач используйте goAsync() (API 11+) или явно запускайте фоновый поток/IntentService.
  • Если регистрируете ресивер в коде (через registerReceiver()), можно указать Handler для вызова в другом потоке.

Пример с goAsync():

override fun onReceive(context: Context, intent: Intent) {
    val pendingResult = goAsync()
    thread {
        // Долгая операция
        pendingResult.finish()
    }
}