Presento la traduzione da me effettuata dell’articolo What Is Fast App Switching?, scritto da Matt Neuburg. Matt scrive in modo chiaro ed esauriente, e mi sembra che l’argomento possa essere di sicuro interesse.
Chi di voi ha usato iTunes per installare il nuovissimo iOS 4 sul proprio iPhone o iPod touch, o che sta per acquistare un nuovo iPhone 4, potrebbe essersi chiesto come funzioni esattamente una delle feature più reclamizzate di questo nuovo sistema: il Fast App Switching (lett. cambio applicazione rapido). Che cos’è il fast app switching? Che cos’ha a che vedere con il multitasking? Viene attivato soltanto mediante il nuovo doppio tocco del tasto Home? E perché, per molte applicazioni, sembra che non accada nulla di particolarmente nuovo o degno di nota?
Torniamo per un momento ai bei giorni andati (davvero, sono passati solo quattro mesi?) quando Adam [Engst] scrisse un articolo provocatorio dal titolo Does the iPhone OS need multitasking? [iPhone OS ha davvero bisogno del multitasking?] (8 febbraio 2010). Come faceva notare Adam nella sua analisi presciente e incisiva, il multitasking assume un diverso significato a seconda dell’utente. Lo si potrebbe intendere (1) come ciò che avviene in Mac OS X, in cui molteplici applicazioni si eseguono davvero simultaneamente e si passa dall’applicazione A a una finestra dell’applicazione B per ritrovarla esattamente come è stata lasciata. Oppure lo si potrebbe intendere (2) come la semplice capacità di passare rapidamente da una all’altra delle applicazioni utilizzate di recente, le quali registrano il proprio stato in fase di uscita così da comportarsi come se si trovassero nello stato in cui sono state lasciate. La soluzione implementata da Apple è qualcosa di un po’ più ambizioso dell’opzione 2, ma ancora considerevolmente meno dispendioso di risorse (e potenzialmente meno pericoloso) dell’opzione 1.
Ecco quel che c’è da sapere. Quando si sta eseguendo un’applicazione in iOS 4 e si preme una volta il tasto Home per terminarla e uscire, l’applicazione non viene terminata. Entra invece in uno stato di animazione sospesa, come gli scienziati in ibernazione criogenica in 2001: Odissea nello spazio. L’applicazione semplicemente smette di ricevere eventi dal sistema; il suo loop di esecuzione non si sta eseguendo. L’applicazione viene posta in background e in stato di inerzia; ma è sempre attiva, nel senso che le sue risorse e la sua interfaccia sono ancora presenti, in modo che non deve essere rilanciata da zero per riprendere a funzionare. In questo modo, quando si ritorna a quell’applicazione, non importa come, essa può tranquillamente riprendere a fare quel che stava facendo prima di ‘chiuderla’, all’istante.
Questo comportamento è il fast app switching e rappresenta gran parte di quel che Apple chiama multitasking in iOS 4. (Non la totalità del multitasking, perché alcune applicazioni con funzionalità specializzate si registrano con il sistema per avere il permesso di entrare in sospensione con un thread ancora attivo; tale funzionalità è strettamente limitata alla riproduzione audio, al rilevamento della posizione e al Voice over IP. Ma in questo articolo non mi occuperò di tali situazioni).
L’interfaccia del fast app switching che si ottiene premendo due volte il tasto Home (anche questo dettaglio è stato correttamente previsto dall’articolo di Adam) è tutt’altro che irrilevante. È un sistema comodo per terminare (pardon, sospendere) un’applicazione e avviare (o ripristinare) un’altra applicazione recentemente utilizzata, ma tale interfaccia avrebbe potuto tranquillamente essere presente già nelle prime versioni di iPhone OS. È una mera interfaccia, l’equivalente su iPhone della combinazione ⌘-Tab sul Mac. È anche un’ottima interfaccia, e ci voleva; mi sarebbe piaciuto che iPhone avesse funzionato così fin dal principio, perché il passare da un’applicazione all’altra — specialmente fra due applicazioni in particolare — è una cosa che faccio molto spesso. Ma l’interfaccia non ha nulla a che vedere con la tecnologia di multitasking del fast app switching. Offre tuttavia un certo accesso a quella tecnologia, come vedremo.
Poco fa ho detto che quando si chiude un’applicazione, questa non si chiude veramente. E allora quando un’applicazione viene realmente terminata? Sicuramente il nostro iPhone non continuerà a riempirsi di corpi congelati di decine di applicazioni sospese fino al riavvio successivo, no? Un’applicazione può venir terminata in tre modi:
- Il sistema può, in qualunque momento, terminare un’applicazione sospesa (ancora, come gli scienziati in 2001: Odissea nello spazio). Il sistema non prende questa decisione perché è improvvisamente impazzito (come HAL 9000), ma perché ogni applicazione sospesa, anche se non sta impiegando risorse della CPU, sta comunque occupando memoria, e in un dispositivo mobile la memoria è una risorsa limitata e preziosa. Il sistema, dunque, si riserva il diritto di reclamare memoria terminando un’applicazione sospesa.
- Si può terminare un’applicazione sospesa manualmente. È quel che accade quando nell’interfaccia del fast app switching si ‘cancella’ un’applicazione dopo aver fatto tremolare le icone [come quando si riorganizzano le schermate di iPhone].
- Se un’applicazione non è stata specificamente ricompilata per iOS 4, quando la si chiude, essa viene terminata per davvero.
Quest’ultimo punto è fondamentale, soprattutto perché contraddice tutto quel che ho detto in precedenza in questo articolo. Pare proprio che per partecipare al multitasking e permettere che il sistema la sospenda, ogni applicazione deve essere ricompilata per iOS 4. Se un’applicazione non sembra comportarsi in maniera differente quando la si ripristina in iOS 4 rispetto a come si comportava in versioni dell’OS precedenti quando la si rilanciava, allora vuol dire che non è stata ancora ricompilata. È il caso della stragrande maggioranza delle applicazioni!
Chiaramente gli sviluppatori avranno bisogno di tempo per ricompilare le loro applicazioni per iOS 4 e per farle approvare da Apple prima che raggiungano i nostri dispositivi. Fino a quel momento non si noteranno grandi benefici nel multitasking in iOS 4. Solo le applicazioni Apple, e quelle poche che sono state già aggiornate, si comportano in un modo nuovo.
In più, ricompilare per iOS 4 non è affare da poco (come ho appena scoperto facendolo per l’applicazione TidBITS News — vedere Free TidBITS News iPhone App, 4 gennaio 2010), perché comporta anche la riscrittura di alcune parti. L’applicazione partecipa al multitasking istantaneamente senza alcuna modifica nel codice, semplicemente collegandosi ai framework di iOS 4 invece che a quelli di una versione precedente; ma questo non la rende un buon cittadino del multitasking, per così dire.
Un grosso problema è che un’applicazione iOS 4 nativa riceve notifica quando viene sospesa, ma non quando viene terminata. Pertanto, per salvare il proprio stato quando viene sospesa, deve svolgere tutti quei compiti che prima attuava quando veniva chiusa, terminata, nel caso venga effettivamente terminata in un secondo momento. Un altro problema è che l’applicazione, quando è sospesa, deve smettere di fare cose che potrebbero creare imprevisti dopo. Deve espressamente ridurre il consumo di memoria se non vuole diventare un candidato per la terminazione in background. Deve cessare qualunque attività di rete. Potrebbe dover terminare uno stato modale, come un avviso che potrebbe non avere più senso quando l’utente ripristina l’applicazione in un secondo momento (magari alcuni giorni dopo).
Queste sono le cose delle quali ho dovuto preoccuparmi effettuando l’aggiornamento dell’applicazione TidBITS News per iOS 4. In sostanza, ho dovuto considerare tutti i possibili stati in cui l’applicazione potrebbe trovarsi quando l’utente la sospende. È stata un’impresa decisamente difficile — e stiamo parlando di un’applicazione piccola e semplice. Immaginate quanto tempo potrebbe passare prima che vengano aggiornate le nostre applicazioni di terze parti preferite.
Ma quando verranno aggiornate, potremo passare da una all’altra a gran velocità. È a quel punto che si potrà sperimentare davvero il fast app switching, lasciando un’applicazione e tornando a essa in un secondo momento per ritrovarla immediatamente pronta a riprendere da dove l’avevamo lasciata. Questo è ciò che si intende per multitasking in iOS 4.