Come ormai è stato detto più volte, almeno nella prima versione di Windows Phone 7 non sarà disponibile il Multitasking, questo significa che le applicazioni di terze parti (quindi tutte quelle non di Microsoft), non potranno rimanere in esecuzione, a questo va aggiunto anche il fatto che un utente può uscire da un'applicazione in diversi modi. Ciò comporta che lo sviluppatore adotti delle politiche di salvataggio/recupero dei dati, ma come fare?
Cerchiamo di capire come funziona il ciclo di vita di un applicazione in modo da avere chiari gli strumenti che ci vengono messi a disposizione. Per fare questo ci vengono in aiuto dei metodi della classe PhoneApplicationService.
Quando un'applicazione viene lanciata, chiusa, deattivata o riattivata possiamo attaccarci a questi metodi che ci permettono di salvare/leggere dei dati, i metodi chiamati dipendono esclusivamente da come l'utente entra o esce dalla nostra applicazione. Quando viene lanciata la prima volta verrà chiamato il metodo PhoneApplicationService.Launching, se dopo il lancio eseguiamo delle operazioni e poi premiamo il tasto back fino alla home screen faremo scattare l'evento PhoneApplicationService.Closing in quanto siamo tornati indietro fino alla prima pagina dell'applicazione quindi alla situazione iniziale e tornando indietro ulteriormente, chiuderemo l'applicazione. Se durante l'esecuzione invece premiamo il tasto home, lanciamo un task, riceviamo una chiamata o un sms l'applicazione verrà disattivata e verrà chiamato il metodoPhoneApplicationService.Deactivated.
Nel caso un'applicazione si trovi in stato di "non attivo" o TombStoned (come da terminologia ufficiale) la stessa può essere riattivata alla prossima apertura e in questo caso, non verrà lanciato il metodo PhoneApplicationService.Launching bensì PhoneApplicationService.Activated.
C'è comunque da dire che un'applicazione che viene riattivata è sempre e comunque una nuova istanza della stessa quindi la domanda è cosa cambia fra la deattivazione e la chiusura? La differenza sta nel fatto che se un applicazione viene chiusa alla prossima apertura avremo a tutti gli effetti la schermata principale mentre se la stessa viene riattivata ed il BackStack è riuscito a tener traccia delle operazioni fatte l'applicazione verrà rilanciata dalla stessa pagina in cui si trovava quando è stata disattivata. Questo comportamento non influenza però gli imput o controlli particolari cioè se riattiviamo un applicazione e ci troviamo in una pagina dove vi era una textbox, la stessa non verrà riempita in automatico, è molto importante ricordarsi di questo: tutti i dati importanti vanno salvati nel momento della disattivazione o chiusura se ne avremo bisogno in futuro.
Nei prossimi post vedremo come usare questi metodi nella pratica, qui sotto uno schema dettagliato del ciclo di vita di un applicazione per windows phone.
