Introduzione all'elaborazione in background in iOS

iOS regola l'elaborazione in background molto strettamente e offre tre approcci per implementarlo:

  • Registra un'attività in background : se un'applicazione deve completare un'attività importante, può chiedere a iOS di non interrompere l'attività quando l'applicazione si sposta in background. Ad esempio, un'applicazione potrebbe dover completare l'accesso a un utente o completare il download di un file di grandi dimensioni.
  • Registra come applicazione in background- Un'app può registrarsi come tipo specifico di applicazione con requisiti di background noti, ad esempio Audio , VoIP, Accessorio esterno, Codice ePosizione. Queste applicazioni sono consentiti privilegi di elaborazione in background continui purché eseseguono attività che si trovano all'interno dei parametri del tipo di applicazione registrata.
  • Abilita Aggiornamenti in background: le applicazioni possono attivare gli aggiornamenti in background con il monitoraggio dell'area o ascoltando modifiche significative alla posizione. A partire da iOS 7, le applicazioni possono anche registrarsi per aggiornare il contenuto in background usando il recupero in background o le notifiche remote .

Stati dell'applicazione e metodi delegati dell'applicazione

Prima di approfondire il codice per l'elaborazione in background in iOS, è necessario comprendere in che modo l'esecuzione in background influisce sul ciclo di vita di un'applicazione iOS.

Il ciclo di vita dell'applicazione iOS è una raccolta di stati e metodi dell'applicazione per spostarsi tra di essi. Un'applicazione passa da uno stato all'altro in base al comportamento dell'utente e ai requisiti di background dell'applicazione. Il movimento è illustrato nel diagramma seguente:

Application States and Application Delegate Methods diagram

  • Non in esecuzione : l'applicazione non è ancora stata avviata nel dispositivo.
  • Esecuzione/Attiva : l'applicazione si trova sullo schermo ed esegue il codice in primo piano.
  • Inattivo : l'applicazione viene interrotta da una telefonata, un sms o un'altra interruzione in arrivo.
  • In background: l'applicazione passa in background e continua l'esecuzione del codice in background.
  • Sospeso : se l'applicazione non dispone di codice da eseguire in background o se tutto il codice è stato completato, l'app verrà sospesa dal sistema operativo. Il processo di un'applicazione sospesa viene mantenuto attivo, ma l'applicazione non è in grado di eseguire codice in questo stato.
  • Torna a Non in esecuzione/Terminazione (rara): occasionalmente, il processo dell'applicazione viene eliminato definitivamente e l'applicazione torna allo stato Non in esecuzione . Ciò si verifica in situazioni di memoria insufficiente o se l'utente termina manualmente l'applicazione.

Dall'introduzione del supporto multitasking, iOS termina raramente le applicazioni inattive e mantiene invece i processi sospesi in memoria. Mantenere attivo il processo di un'applicazione garantisce che l'applicazione venga avviata rapidamente al successivo apertura dell'applicazione. Significa anche che le applicazioni possono spostarsi liberamente dallo stato Sospeso allo stato In background senza disegnare sulle risorse di sistema. iOS 7 sfrutta questa funzionalità con nuove API che consentono alle applicazioni di sospendere le attività in background quando il dispositivo passa alla sospensione, aggiorna il contenuto direttamente dallo sfondo senza interazione dell'utente e altro ancora. Verranno illustrate le nuove API nelle tecniche di background iOS.

Metodi del ciclo di vita dell'applicazione

Quando un'app cambia stato, iOS invia una notifica all'applicazione tramite metodi di evento nella AppDelegate classe :

  • OnActivated - Questa operazione viene chiamata la prima volta che l'applicazione viene avviata e ogni volta che l'app torna in primo piano. Questa è la posizione in cui inserire il codice che deve essere eseguito ogni volta che l'app viene aperta.
  • OnResignActivation - Se l'utente riceve un'interruzione, ad esempio un SMS o una telefonata, questo metodo viene chiamato e l'app viene temporaneamente disattivata. Se l'utente accetta la telefonata, l'app verrà inviata in background.
  • DidEnterBackground - Chiamato quando l'app entra nello stato in background, questo metodo fornisce un'applicazione circa cinque secondi per prepararsi per la possibile terminazione. Usare questa volta per salvare i dati e le attività dell'utente e rimuovere informazioni riservate dalla schermata.
  • WillEnterForeground - Quando un utente torna a un'applicazione in background o sospesa e lo avvia in primo piano, WillEnterForeground viene chiamato. Questo è il momento di preparare l'app in primo piano riattivando qualsiasi stato salvato durante DidEnterBackground . OnActivated verrà chiamato immediatamente dopo il completamento di questo metodo.
  • WillTerminate - L'applicazione viene arrestata e il relativo processo viene eliminato definitivamente. Questo metodo viene chiamato solo se il multitasking non è disponibile nel dispositivo o nella versione del sistema operativo, se la memoria è insufficiente o se l'utente termina manualmente un'applicazione in background. Si noti che le applicazioni sospese che vengono terminate non chiameranno WillTerminate .

Il diagramma seguente illustra il modo in cui gli stati dell'applicazione e i metodi del ciclo di vita si integrano tra loro:

This diagram illustrates how the application states and lifecycle methods fit together

Controlli utente per lo sfondo in iOS

iOS 7 ha introdotto diverse funzionalità per offrire agli utenti un maggiore controllo sullo stato in background di un'applicazione. L'impostazione Cambia app e Aggiornamento app in background influiscono sul ciclo di vita dell'applicazione.

Cambio app

Il commutatore app è una funzionalità di controllo importante introdotta in iOS 7. Viene avviato toccando due volte il pulsante Home e mostra le applicazioni i cui processi sono attivi:

Moving between apps using the App Switcher

Usando lo switcher app, gli utenti possono scorrere gli snapshot di tutte le applicazioni in background e sospese. Toccando un'applicazione viene avviata in primo piano. Se si esegue lo scorrimento verso l'alto, l'applicazione viene rimossa in background, terminando il processo. Esamineremo più in dettaglio il commutatore app nella demo del ciclo di vita dell'applicazione iOS nella sezione successiva.

Importante

Lo switcher app non mostra una differenza tra le applicazioni in background e sospese.

Aggiornamento dell'app in background Impostazioni

iOS 7 aumenta il controllo utente sul ciclo di vita dell'applicazione consentendo agli utenti di rifiutare esplicitamente le applicazioni registrate per l'elaborazione in background. Ciò non impedisce alle applicazioni di eseguire attività in background.

Gli utenti possono modificare questa impostazione passando a Impostazioni > Aggiornamento generale > dell'app in background e modificando i privilegi di sfondo per un'applicazione selezionata. Se l'opzione Aggiornamento app in background è disattivata, l'applicazione verrà sospesa immediatamente dopo l'ingresso in background e non potrà eseguire alcuna elaborazione in background:

Background App Refresh Settings

Gli sviluppatori possono controllare lo stato dell'applicazione di aggiornamento in background con l'API BackgroundRefreshStatus . Per un esempio, fare riferimento alla ricetta Controlla impostazione aggiornamento in background.

Sono stati illustrati i concetti di base del ciclo di vita delle applicazioni iOS e le funzionalità per il controllo del ciclo di vita dell'applicazione. Verrà ora illustrato il ciclo di vita dell'applicazione iOS in azione.