Можно ли выполнять длительные операции в методе onReceive()?

Посмотреть в Telegram: @AndroidSobes/30
Скорее нет, чем да. Зависит от того, что считать длительной операцией. Отвечая на этот вопрос, расскажите, что происходит с процессом приложения, в котором запущен только BroadcastReceiver.

Допустим приложение не запущено и ресивер, зарегистрированный в манифесте, получает событие. В этом случае система стартует процесс приложения и вызывает BroadcastReceiver.onReceive() в главном потоке. Фоновые процессы имеют низкий приоритет, поэтому после завершения метода onReceive() система убивает процесс приложения. Если в onRecieve() запустить фоновый поток, о котором не знает система, например, чтобы выполнить запрос на бэкенд, процесс все равно будет убит.
Для выполнения фоновых потоков в onReceive() используется метод goAsync(), который сохраняет BroadcastReceiver после завершения onReceive(). Но даже с использованием метода goAsync() жизнь ресивера ограничивается 10 секундами.

Для выполнения действительно длительных операций рекомендуется использовать Foregorund service или JobIntentService, которые можно запустить в onReceive().

Подробнее в документации.