Esecuzione in background nello sviluppo mobile — essenza, limiti e principi di funzionamento

Autore: IT Sectr Pubblicato: 2026-03-26 Tempo di lettura: 9 min

Background Execution è un meccanismo che consente di eseguire il codice di un'applicazione mobile quando non è in primo piano. Senza questo meccanismo, il sistema sospende l'applicazione quando viene ridotta a icona. Secondo Apple, 2026, iOS limita il tempo in background a 30 secondi, mentre Android offre scenari più flessibili tramite WorkManager e Foreground Service.

Punti Chiave

  • Background Execution — esecuzione del codice dell'app quando è ridotta a icona o inattiva.
  • iOS — limiti rigidi: 30 secondi per le attività, Background Modes e App Refresh rigorosi.
  • Android — WorkManager, Foreground Service, Scheduling e modalità Doze con diverse restrizioni.
  • Consumo energetico — la ragione principale dei limiti: i processi in background riducono la durata della batteria.
  • Privacy — da Android 8 e iOS 13, i sistemi richiedono autorizzazioni esplicite per il lavoro in background.

Cos'è l'esecuzione in background nelle app mobili?

Background Execution è la capacità di un'applicazione di continuare a eseguire codice dopo che l'utente l'ha ridotta a icona o è passato a un'altra app. Senza meccanismi speciali, il sistema operativo mobile mette l'applicazione nello stato Suspended (sospeso) entro pochi secondi dal passaggio in background, liberando CPU e memoria per le app attive.

Stati dell'applicazione in background

Un'applicazione mobile attraversa diversi stati del ciclo di vita: Foreground (attivo), Background (in background), Suspended (sospeso) e Terminated (terminato). Background è l'unico stato in cui l'app può eseguire codice senza un'interfaccia visibile. iOS e Android definiscono la durata e le operazioni disponibili in questo stato in modo diverso.

Casi d'uso principali

L'esecuzione in background è necessaria per la sincronizzazione dei dati, il download di contenuti, l'elaborazione delle notifiche Push, la geolocalizzazione in background e la riproduzione audio. La sincronizzazione è lo scenario più comune: l'app invia dati al server o scarica aggiornamenti senza l'intervento dell'utente.

  • Sincronizzazione — caricamento e scaricamento dei dati al cambiamento dello stato della rete.
  • Geolocalizzazione — tracciamento della posizione nei tracker fitness e nei navigatori.
  • Multimedia — riproduzione di audio e video in background (musica, podcast).
  • Notifiche — elaborazione di notifiche Push e locali.
  • Download — scaricamento di file di grandi dimensioni (podcast, video) in background.

Perché i sistemi operativi mobili limitano l'esecuzione in background

I limiti dell'esecuzione in background sono dovuti a tre fattori: consumo energetico, prestazioni del dispositivo e privacy dell'utente. La CPU e i moduli radio (Wi-Fi, dati cellulari) consumano più energia — ogni processo in background riduce la durata della batteria.

Consumo energetico e autonomia

Gli studi di Google mostrano che le app che eseguono attività in background ogni 5 minuti riducono la durata della batteria del dispositivo del 20–30% al giorno. Anche le operazioni in background ottimizzate con una frequenza di una volta all'ora hanno un impatto notevole se ci sono più di due di queste app.

RAM e prestazioni

Ogni app in background occupa RAM. Quando la RAM è insufficiente, il sistema scarica le app dalla memoria, causando un riavvio al ritorno dell'utente. iOS utilizza l'algoritmo Jetsam — un meccanismo di terminazione forzata dei processi in background quando viene superato il limite di memoria. Android utilizza LMK (Low Memory Killer) con un principio simile.

Privacy dell'utente

A partire da Android 10 e iOS 13, il sistema richiede che le app dichiarino lo scopo del lavoro in background. Android ha introdotto restrizioni all'avvio dei Broadcast Receiver in background. iOS richiede di specificare la Background Mode nelle Capabilities del progetto. L'utente può disabilitare l'esecuzione in background per qualsiasi app nelle impostazioni.

Sistema operativoVersioneRestrizioneImpatto
Android8.0IMPLICIT_BROADCAST vietato67% dei Broadcast in background danneggiati
Android9.0Doze miglioratoChiamate di rete limitate
Android12+Foreground Service limitatoAvvio da background vietato
iOS7+Background App RefreshFinestre di aggiornamento periodiche
iOS13+BGTaskSchedulerPianificazione invece di esecuzione

Esecuzione in background su Android: WorkManager e Foreground Service

Android fornisce diversi meccanismi per l'esecuzione in background, ciascuno dei quali risolve una categoria diversa di attività. WorkManager è l'API consigliata per attività differite e periodiche. Foreground Service è per l'esecuzione immediata con una notifica visibile. JobScheduler è un'alternativa di basso livello a WorkManager.

WorkManager — Soluzione universale

WorkManager fa parte di Android Jetpack e fornisce l'esecuzione di attività in background con garanzia di completamento anche dopo il riavvio del dispositivo. L'API sceglie il momento di esecuzione ottimale tenendo conto dello stato della rete, del livello della batteria e della modalità Doze. WorkManager è compatibile con API 14+ e sostituisce i deprecati AlarmManager e JobScheduler.

Foreground Service — Per operazioni prolungate

Quando un'app deve eseguire un'attività visibile all'utente (riproduzione musicale, registrazione di geolocalizzazione), viene utilizzato Foreground Service. Il servizio mostra una notifica persistente nella barra di stato e ha una priorità più alta — il sistema non lo terminerà fino al completamento dell'attività. A partire da Android 13, è richiesta l'autorizzazione POST_NOTIFICATIONS.

Modalità Doze e ottimizzazione della batteria

A partire da Android 6.0, il dispositivo entra in modalità Doze quando è inattivo. In questa modalità, le operazioni di rete, la sincronizzazione e JobScheduler vengono rinviati. WorkManager si adatta automaticamente a Doze — le attività vengono eseguite durante la successiva finestra di manutenzione quando il dispositivo si risveglia per la manutenzione.

Esecuzione in background su iOS: Background Tasks e App Refresh

iOS adotta un approccio più rigoroso all'esecuzione in background. Background App Refresh è il meccanismo principale per l'aggiornamento periodico dei dati. BGTaskScheduler è l'API per pianificare le attività in base allo stato del sistema. Per operazioni prolungate, sono disponibili Background Modes: audio, location, voip, fetch e processing.

Background App Refresh

Background App Refresh consente all'app di riattivarsi ogni 15–30 minuti per sincronizzare i dati. Il tempo di riattivazione dipende dal comportamento dell'utente — il sistema analizza la frequenza con cui apre l'app. Gli utenti possono disabilitare questa funzione per singole app in Impostazioni — Generali — Background App Refresh.

BGTaskScheduler — Approccio moderno

A partire da iOS 13, BGTaskScheduler ha sostituito i deprecati performFetch e beginBackgroundTask. L'app registra le attività con un identificatore e un intervallo minimo, e il sistema determina il momento di esecuzione ottimale. Le attività sono divise in due tipi: BGProcessingTask (lunghe, 10+ minuti) e BGAppRefreshTask (brevi, fino a 30 secondi).

Limiti di tempo di esecuzione

iOS alloca tempo limitato per l'esecuzione di attività in background — fino a 30 secondi per BGAppRefreshTask e fino a 10 minuti per BGProcessingTask. Quando il limite viene superato, il sistema termina forzatamente l'attività. Lo sviluppatore deve chiamare il gestore di scadenza (expiration handler) per salvare i risultati intermedi.

Esempi di codice: Android WorkManager

Vediamo un'implementazione pratica dell'esecuzione in background su Android usando WorkManager. Un esempio di sincronizzazione dei dati ogni 8 ore con consapevolezza dello stato della rete. WorkManager garantisce l'esecuzione dell'attività anche dopo il riavvio del dispositivo.

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "Dati sincronizzati")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Esegui attività periodica ogni 8 ore
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(false)
    .build()

val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
    8, TimeUnit.HOURS
).setConstraints(constraints).build()

WorkManager.getInstance(context).enqueue(syncRequest)

Foreground Service con notifica

Per operazioni prolungate visibili all'utente, utilizzare Foreground Service. Un esempio di download di file con stato di avanzamento nella notifica. Il servizio chiama startForeground() con una notifica che non può essere rimossa. Al completamento del download — stopForeground(STOP_FOREGROUND_REMOVE).

kotlin
class DownloadService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
        startForeground(NOTIFICATION_ID, createNotification())
        downloadFile()
        stopForeground(STOP_FOREGROUND_REMOVE)
        stopSelf()
        return START_NOT_STICKY
    }
    private fun createNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Scarica file")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

Esempi di codice: iOS BGTaskScheduler

Su iOS, l'esecuzione in background viene configurata tramite BGTaskScheduler. Un esempio di registrazione ed esecuzione di un'attività di aggiornamento dei contenuti. L'app deve registrare l'identificatore dell'attività in Info.plist e chiamare submit quando l'attività deve essere pianificata.

swift
import BackgroundTasks

func registerBackgroundTask() {
    BGTaskScheduler.shared.register(
        forTaskWithIdentifier: "com.app.refresh",
        using: nil
    ) { task in
        self.handleAppRefresh(task: task as! BGAppRefreshTask)
    }
}

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(
        identifier: "com.app.refresh"
    )
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

func handleAppRefresh(task: BGAppRefreshTask) {
    scheduleAppRefresh()
    task.expirationHandler = {
        // Salva dati intermedi
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

Per operazioni prolungate (pulizia della cache, elaborazione dati), utilizzare BGProcessingTask. Il sistema concede fino a 10 minuti per l'esecuzione. Viene eseguito solo quando il dispositivo è in carica e connesso al Wi-Fi. Richiede un identificatore separato in Info.plist e la registrazione tramite register(forTaskWithIdentifier:).

swift
func scheduleProcessing() {
    let request = BGProcessingTaskRequest(
        identifier: "com.app.cleanup"
    )
    request.requiresExternalPower = true
    request.requiresNetworkConnectivity = true
    request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

Confronto degli approcci Android e iOS

Android e iOS differiscono fondamentalmente nella loro filosofia di esecuzione in background. Android offre strumenti flessibili con maggiore controllo ma richiede allo sviluppatore di scegliere l'API corretta. iOS limita le capacità ma garantisce prestazioni stabili e autonomia per l'utente.

CriterioAndroidiOS
API consigliataWorkManagerBGTaskScheduler
Tempo massimo attivitàIllimitato (Foreground Service)30 s / 10 min (processing)
Attività periodicheSì, tramite PeriodicWorkRequestSì, tramite BGAppRefreshTask
Garanzia di esecuzioneSì, anche dopo riavvioNo — il sistema decide quando
Accesso alla rete in backgroundLimitato dalla modalità DozeTramite URLSession con background config
Geolocalizzazione in backgroundForeground Service + autorizzazioneBackground Mode location + NSLocation
Audio in backgroundForeground Service con notifica multimedialeBackground Mode audio + AVAudioSession

Quando scegliere Android WorkManager

WorkManager è ottimale per attività che devono essere completate indipendentemente dallo stato dell'app: sincronizzazione dati, invio di analisi, elaborazione code. L'API garantisce l'esecuzione anche dopo lo spegnimento del dispositivo — l'attività viene riprogrammata dopo l'avvio.

Quando scegliere iOS BGTaskScheduler

BGTaskScheduler è adatto per attività che il sistema può eseguire in qualsiasi momento opportuno: scaricare nuovi contenuti, aggiornare widget, pulire la cache. Non adatto per operazioni urgenti — il sistema ritarda l'attività se il dispositivo è in Doze o ha poca batteria.

Domande Frequenti

Qual è la differenza tra Background Execution e Background Modes?

Background Execution è un concetto generale che descrive qualsiasi codice eseguito in background. Background Modes è un meccanismo specifico di iOS che consente a un'app di eseguire determinati tipi di operazioni in background: audio, geolocalizzazione, VoIP, fetch. Android utilizza un approccio simile tramite i tipi di Foreground Service.

Perché la mia app termina dopo 30 secondi in background?

Su iOS, questo è il limite standard per BGAppRefreshTask. Il sistema termina forzatamente l'attività quando viene raggiunto il limite. Su Android, una situazione simile si verifica quando l'app non utilizza WorkManager o Foreground Service — un Service normale viene terminato dal sistema dopo essere passato in background.

Come garantire l'esecuzione delle attività su entrambe le piattaforme?

Su Android, utilizzare WorkManager — garantisce l'esecuzione anche dopo il riavvio. Su iOS, l'esecuzione non può essere garantita — il sistema decide quando eseguire l'attività. L'unico modo per garantire l'esecuzione è utilizzare Background Modes (audio, location) con un indicatore visibile per l'utente.

Come verificare se l'esecuzione in background è consentita?

Su iOS, chiamare UIApplication.shared.backgroundRefreshStatus — stato .available, .denied o .restricted. Su Android, utilizzare PowerManager.isIgnoringBatteryOptimizations() per verificare l'esenzione dall'ottimizzazione della batteria. Per WorkManager, non è necessaria alcuna verifica — l'API gestisce da sola le restrizioni del sistema.

Quali alternative all'esecuzione in background esistono?

Le notifiche Push sono il meccanismo principale per attivare azioni senza codice in background. Su iOS, sono disponibili PushKit per VoIP e Silent Push per l'aggiornamento dei dati. Su Android — High Priority FCM e Notification Trampoline. I WebSocket tramite Foreground Service sono un'alternativa per le app in tempo reale.

Riepilogo

  • Background Execution — meccanismo per eseguire codice quando l'app è ridotta a icona, cruciale per sincronizzazione, download e notifiche.
  • Android offre WorkManager (esecuzione garantita), Foreground Service (attività visibili prolungate) e restrizioni della modalità Doze.
  • iOS utilizza BGTaskScheduler (pianificazione), Background App Refresh (aggiornamenti periodici) e Background Modes per multimedia e geolocalizzazione.
  • Consumo energetico — la ragione principale dei limiti: i processi in background non ottimizzati riducono la durata della batteria del 20–30%.
  • Privacy — entrambe le piattaforme richiedono autorizzazioni esplicite (Android POST_NOTIFICATIONS, iOS Background Modes) e notifica all'utente.
  • WorkManager è l'unica API con garanzia di esecuzione dopo il riavvio; BGTaskScheduler si affida alle decisioni del sistema.
  • Utilizzare Foreground Service su Android e Background Modes su iOS per operazioni prolungate visibili nella barra di stato.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche