Ответ
Да, можно. Service выполняется в главном потоке по умолчанию. Чтобы избежать ANR, нужно использовать:
- IntentService (устарел, но прост в использовании) - автоматически создает worker-поток.
public class MyIntentService extends IntentService {
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
// Работа в фоне
}
}
- JobIntentService (рекомендуется) - работает через JobScheduler на API 26+.
public class MyJobIntentService extends JobIntentService {
@Override
protected void onHandleWork(@NonNull Intent intent) {
// Фоновая работа
}
}
-
Foreground Service + собственный поток/ThreadPoolExecutor для долгих операций.
-
WorkManager - для отложенных фоновых задач.
Важно помнить, что с Android 8+ есть ограничения на работу фоновых сервисов.