Ответ
BroadcastReceiver по умолчанию работает в основном потоке (UI-потоке). Это означает, что если в onReceive() выполняется долгая операция, UI может зависнуть.
Решение:
- Для длительных задач используйте
goAsync()(API 11+) или явно запускайте фоновый поток/IntentService. - Если регистрируете ресивер в коде (через
registerReceiver()), можно указатьHandlerдля вызова в другом потоке.
Пример с goAsync():
override fun onReceive(context: Context, intent: Intent) {
val pendingResult = goAsync()
thread {
// Долгая операция
pendingResult.finish()
}
}