Windows Phone 7: gestire l'applicazione, lo stato ed il tombstoning

di Alessio Leoncini, in Windows Phone 7,


Questo articolo è tratto dal capitolo 8 ("Gestione dello stato") del libro Sviluppare applicazioni per Windows Phone, di Daniele Bochicchio, Cristian Civera, Marco De Sanctis, Alessio Leoncini, Marco Leoncini (Hoepli, 2011)

Acquista subito la tua copia ad un prezzo vantaggioso!

Nel corso dei capitoli precedenti abbiamo illustrato lepeculiarità dello sviluppo di applicazioni per Windows Phone in Silverlight eabbiamo evidenziato le attenzioni che dobbiamo porre per sfruttare al megliosia le caratteristiche delle piattaforme di sviluppo sia quelle dei dispositiviveri e propri.

Una volta compresi i concetti principali, dobbiamo affrontare ilciclo di vita delle applicazioni, legato in particolar modo all'assenza dimulti-tasking per le applicazioni esterne, cioè all'impossibilità in WindowsPhone di eseguire più applicazioni contemporaneamente.

Nel capitolo analizzeremo il comportamento adottato dal sistema,il cosiddetto tombstoning, che entra in gioco durante il passaggio daun'applicazione a un'altra. Approfondiremo le modalità di gestione dello statoe della sua persistenza anche in relazione a tutte le attività di risparmioenergetico adottate dalla piattaforma, come la visualizzazione del lock-screene la disattivazione automatica delle applicazioni.

Il modello a singola applicazione

Windows Phone 7 è il sistema operativo che Microsoft hasviluppato raccogliendo le esperienze con la precedente piattaforma; nellaprogettazione ha tenuto in considerazione l'andamento delle caratteristichehardware dei correnti dispositivi mobile e, come abbiamo visto, ha postoparticolare attenzione anche alla facilità di sviluppo delleapplicazioni. La buona riuscita commerciale del prodotto è molto legata alnumero e alla qualità dei programmi che l'utente può installare autonomamente.

In relazione alle elevate capacità di memoria e di calcolo,Microsoft ha potuto scegliere Silverlight e XNA come framework di lavoro,rispettivamente per applicazioni e giochi, mettendo a disposizione un insiemedi strumenti di alto livello su cui modellare le nostre applicazioni senzadoverci concentrare sulle interazioni col sistema sottostante e con l'hardware.Tuttavia, la facilità di sviluppo con Silverlight ha un onere in terminidi uso di risorse, trattandosi di un ulteriore framework sopra a quello delsistema operativo, a cui le applicazioni si riferiscono per accedere aldispositivo.

Nonostante le elevate capacità di calcolo dei moderni device, lerisorse sono comunque un insieme finito e il loro ricorso deve essere ridottoal minimo per garantire un utilizzo fluido e continuo di tutte lefunzionalità che il telefono può mettere a disposizione. Infine, dobbiamoconsiderare che tutto ciò che impegna il sistema incide sulla carica della batteria,la cui eventuale scarsa durata può influire negativamente sull'essenza stessadi dispositivo "portatile".

Sulla base di queste considerazioni, Microsoft ha deciso diconsentire l'esecuzione di una sola applicazione per volta, evitando ilconcetto di applicazione in finestra (quindi tenendo l'unica applicazionesempre in primo piano) e chiudendo quella precedente per liberare piùmemoria possibile, limitare l'uso della rete e non impegnare la CPU conoperazioni pendenti.

La scelta di non consentire ciò che è noto come multi-taskingè stata ponderata anche in funzione dell'utilizzo che gli utenti fanno deltelefono: a differenza di quanto accade nel PC, le interazioni traun'applicazione e un'altra non sono molto frequenti e comunque sono assolvibilisenza la loro effettiva e contemporanea esecuzione. Il caso più evidente è lamancata necessità di drag&drop di dati che non è attuabile su devicecon schermi ridotti, così come la funzionalità di copia/incolla laquale, pur trattandosi di uno scambio di dati tra applicazioni, può esseregestita da un agente esterno a cui è demandato il compito di intermediario.

Nota

La funzionalità di copia/incolla non era stata inseritanella release al momento del lancio ed è stata aggiunta successivamente nelprimo aggiornamento del sistema operativo.

La scelta di consentire l'esecuzione di una sola applicazione pervolta è mirata a mantenere il più possibile reattivo il telefono. In verità ilsistema è multi-tasking, ma solo alcune applicazioni interne del sistemapossono rimanere in esecuzione in background durante altre operazioni. È unbuon esempio la riproduzione della musica dall'hub Zune, che rimaneattiva e gestibile dalla barra di controllo del volume.

Passare da un'applicazione a un'altra

Nonostante la scelta di mantenere attiva una sola applicazioneper volta, il modello di interazione progettato nel sistema operativo ciconsente di accedere agilmente alle applicazioni che abbiamo eseguito o dilanciarne velocemente di nuove. In qualunque momento, infatti, possiamo premereil tasto Start per tornare alla start-screen e ottenere la lista dellenostre applicazioni. Alla pressione di tale tasto, il riferimentoall'applicazione appena abbandonata viene inserito nel cosiddetto back-stack,il quale contiene una lista LIFO (Last In First Out) delle applicazioni chel'utente ha utilizzato e abbandonato per altre operazioni.

L'implementazione del back-stack è funzionalmente simile almodello di navigazione di un browser tra lo storico dei siti web e delle paginevisitate dall'utente. Alla pressione ripetuta del tasto Back il sistemariesegue progressivamente le ultime applicazioni accodate e riapre lerispettive pagine in cui si trovava l'utente al momento dell'abbandono,ripercorrendo anche lo stack di queste ultime.

La differenza tra i tasti back e start

Quando ci troviamo nella prima schermata dell'applicazione,sia la pressione del tasto Back che del tasto Start ne causano l'uscita.Tuttavia, i due eventi agiscono internamente in maniera diversa sullo stato:alla pressione del tasto Back l'applicazione corrente viene effettivamente chiusae, per riaprirla, dobbiamo richiamarla dall'elenco delle applicazioni o da unatile in start-screen.

Nota

Come vedremo nel capitolo 13, abbiamo anche la possibilitàdi aprire un'applicazione al momento della ricezione di una sua notifica ditipo toast.

Alla pressione del tasto Start, invece, in qualunque momento ilsistema va alla start-screen: come abbiamo detto, l'applicazione corrente entraa far parte del back-stack e, anziché essere chiusa esplicitamente, viene postanella condizione di "pronta per la chiusura" e il suo stato correnteviene mantenuto in memoria. Quando un'applicazione si trova in questacondizione è il sistema operativo stesso che decide quando chiudere e liberarele risorse, se queste scendono sotto una certa soglia, in modo concettualmenteanalogo al garbage collector del .NET Framework. Raggiunta così lastart-screen, alla successiva pressione del tasto Back le informazionimemorizzate vengono utilizzate per ripristinare lo stato precedentedell'applicazione da riaprire.

Con questo funzionamento, il sistema operativo cerca di operarein modo che l'utente abbia la percezione di tornare all'applicazione precedentecome se questa non si fosse chiusa.

La logica di salvataggio e di ripristino dello stato è nota come tombstoningche, come vedremo nei paragrafi successivi, ci mette a disposizione una seriedi strumenti per ripristinare l'applicazione così come l'utente l'avevalasciata.

Il tombstoning

Il sistema che abbiamo appena descritto si riflettenell'infrastruttura di navigazione delle applicazioni Silverlight attraverso laclasse PhoneApplicationService, del namespace Microsoft.Phone.Shell.

Tale classe espone questa serie di eventi con i quali possiamointercettare i cambiamenti di stato di cui abbiamo parlato:

  • Launching:si verifica quando l'applicazione viene eseguita per la prima volta oppurelanciata dopo una sua chiusura.
  • Closing:corrisponde al momento di chiusura per azione esplicita da parte dell'utente,come abbiamo detto, con il tasto Back nella prima paginadell'applicazione.
  • Deactivated:si verifica a seguito della pressione del tasto Start, all'esecuzione diun Launcher o di un Chooser, per effetto di un agente esterno, come laricezione di una chiamata e anche a seguito del lock dello schermo. Incorrispondenza di tale evento si verifica il salvataggio in memoriadello stato dell'applicazione.Activated:si verifica quando l'utente torna all'applicazione premendo il tasto Back o inseguito alle stesse azioni che hanno causato il Deactivated.L'evento Activated causa una nuova esecuzionedell'applicazione e il ripristino dello stato mantenuto in memoria neltombstoning.

Lo stato persistito nella classe PhoneApplicationServicepermette al sistema di ricaricare automaticamente l'ultima pagina su cuil'utente si trovava al momento dell'abbandono, ma soprattutto ci permette dimemorizzare le informazioni transienti o persistenti, dautilizzare al momento dell'attivazione per ripristinare l'applicazione nellostato in cui l'utente l'ha lasciata.

È importante puntualizzare che il sistema di tombstoning diWindows Phone salva in proprio solo alcune informazioni sullo statodell'applicazione, come la pagina corrente. Il salvataggio dei dati immessidall'utente, la posizione di scrolling, il controllo attivo e, in genere, tuttociò che è stato modificato dall'utente nella sessione ma che ancora non è statosalvato esplicitamente deve essere gestito manualmente attraverso glieventi della classe PhoneApplicationService, conle modalità che spiegheremo nei prossimi paragrafi.

Per capire quando e quali dati salvare e ripristinare, cerchiamodi comprendere la visione d'insieme delle sequenze di eventi che si susseguononel passaggio da un'applicazione all'altra, nei casi più rappresentativi chel'utente può attuare nel normale utilizzo del telefono.

5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti