deep multitasking in windows phone codename "mango"
TRANSCRIPT
![Page 1: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/1.jpg)
Deep multitasking in Windows Phone codename «Mango»
Mobile Software Engineer @ Gaia
Microsoft MVP – Device Application Development
Twitter: @qmatteoq
Facebook: http://www.facebook.com/matteo.pagani
Blog: http://qmatteoq.tostring.it
E-mail: [email protected]
Matteo Pagani
![Page 2: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/2.jpg)
Agenda
Fast App Switching
Application lifecycle
Alarms
Reminders
Background Agents
Background Transfer
Background Audio
![Page 3: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/3.jpg)
FAST APP SWITCHING
Passare velocemente da una applicazione all’altra
![Page 4: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/4.jpg)
Application lifecycle di Windows Phone
Running
Deactivated
Tombstoned
Activated
Save stateRestore state
![Page 5: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/5.jpg)
Application lifecycle di Windows Phone
Tombstoned
Il processo viene terminato.
Activated
L’applicazione viene instanziata da zero.
Viene recuperato lo stato salvato in precedenza.
Deactivated
Occorre salvare lo stato della nostra applicazione.
![Page 6: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/6.jpg)
Application lifecycle di Mango
Running
Deactivated
Dormant
Activated
TombstonedSave state
Restore
state
![Page 7: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/7.jpg)
Applicatione lifecycle di Mango
Dormant
Il processo non viene terminato, ma rimane in background
Vengono terminati tutti i thread e i timer in esecuzione
Vengono scollegate tutte le risorse in uso (camera, rete, ecc.)
Tombstoned
In caso ci sia bisogno di risorse, le applicazioni dormant più vecchie
vengono comunque mandate in tombstone.
Activated
La proprietà IsApplicationInstancePreserved ci dice se
l’applicazione è andata in tombstoned oppure no. In caso sia a false, occorre recuperare lo stato dal tombstone.
Deactivated
Occorre comunque salvare lo stato della nostra applicazione
![Page 8: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/8.jpg)
Deactivated
Windows Phone si incarica di disconnettere
e fermare tutto ciò che possa consumare
risorse in eccesso.
XNA Audio Paused
Sensors Notifications suppressed
Networking Cancelled
Sockets Disconnected
MediaElement Disconnected
Camera Disposed
![Page 9: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/9.jpg)
Activated
Non tutte le risorse vengono riattivate in
automatico: alcune devono essere
manualmente riattivate dall’applicazione.
XNA Audio Resumed
Sensors Notifications resumed
Networking Completed with Cancellation
Sockets -
MediaElement -
Camera -
![Page 10: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/10.jpg)
Fast App Switcher
Tenendo premuto il
pulsante Back del
device, si attiva il Fast App
Switcher, che permette di
sportarci velocemente tra
le applicazioni.
![Page 11: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/11.jpg)
Debugging
Di default, le applicazioni vanno in stato Dormant.
Tramite una proprietà del progetto di Visual Studio, è
possibile forzare lo stato Tombstoned.
![Page 12: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/12.jpg)
ALARMS & REMINDERS
Per gli utenti smemorati
![Page 13: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/13.jpg)
Alarmsusing Microsoft.Phone.Scheduler;
private void AddAlarm(object sender, RoutedEventArgs e){
Alarm alarm = new Alarm(“Alarm");alarm.BeginTime = DateTime.Now.AddSeconds(15);alarm.Content = “Questo è un alarm";
ScheduledActionService.Add(alarm);}
Semplice promemoria con i
pulsanti snooze e
dismiss, possibilità di impostare
un suono personalizzato
![Page 14: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/14.jpg)
Remindersusing Microsoft.Phone.Scheduler;
private void AddReminder(object sender, RoutedEventArgs e){
Reminder reminder = new Reminder(“Reminder");reminder.BeginTime = DateTime.Now.AddSeconds(15);reminder.Content = “Questo è il titolo del reminder";reminder.Title = “Questa è la descrizione del reminder";reminder.RecurrenceType = RecurrenceInterval.Yearly;reminder.NavigationUri = new
Uri("/Reminder.xaml", UriKind.Relative);
ScheduledActionService.Add(reminder);}
Promemoria con snooze personalizzabile
e deep link
![Page 15: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/15.jpg)
BACKGROUND AGENTS
Eseguiamo operazioni in background
![Page 16: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/16.jpg)
Background agents
Un progetto Visual Studio separato da quello dell’applicazione vera
e propria.
Vengono istanziati dall’applicazione foreground ma eseguiti in
background quando questa non è esecuzione.
Due tipi di agents: Periodic e Resource Intensive.
Possono coesistere massimo 18 agents contemporaneamente.
L’utente può abilitarli o disabilitarli da un apposito pannello di
controllo.
Vengono disattivati dopo 14 giorni che l’applicazione collegata non
viene utilizzata.
![Page 17: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/17.jpg)
Cosa possono fare?
Consentito
Tiles Toast Servizidi localizzazione Connettività Accessoall’IsolatedStorage Sockets La maggiorparte delleAPI
Non consentito
Interagirecon la UI LibrerieXNA Microfonoe fotocamera Sensori Riprodurreaudio senza l’ausilio
delleapposite API per ilbackground audio
![Page 18: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/18.jpg)
Periodic agents
Vengono eseguiti ogni 30 minuti
Possono eseguire operazioni per un tempo massimo di
15 secondi
Se il device è in uso, vengono eseguiti uno alla volta
Se il device è in stand by, vengono eseguiti in parallelo
Nascono per task di sincronizzazione veloce, geo
localizzazione, notifiche, ecc.
![Page 19: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/19.jpg)
Periodic agent
Sono oggetti di tipo PeriodicTask
![Page 20: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/20.jpg)
Resource Intensive agents
Vengono eseguiti solo nel momento in cui il device è in
ricarica (collegato al pc o ad una presa di corrente)
Il device deve essere collegato ad una rete Wi-Fi
Possono eseguire operazioni per un tempo massimo di
10 minuti
Nascono per task di sincronizzazioni di grandi quantità di
dati
![Page 21: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/21.jpg)
Resource Intensive agent
Sono oggetti di tipo ResourceIntensiveTask
![Page 22: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/22.jpg)
Il file di manifest
Vengono dichiarati nel file di manifest
dell’applicazione Windows Phone
![Page 23: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/23.jpg)
Background agent
![Page 24: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/24.jpg)
Qualche dettaglio tecnico
Ereditano da ScheduledTaskAgent
Il metodo OnInvoke definisce le operazioni da
compiere quando l’agent viene eseguito
Il metodo opzionale OnCancel viene invocato nel
momento in cui lo slot di tempo assegnato all’agent si
sta esaurendo
![Page 25: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/25.jpg)
BACKGROUND TRANSFER
Un nuovo modo di trasferire file
![Page 26: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/26.jpg)
Background Transfer
Una nuova classe per gestire il download e upload di file all’interno
dell’applicazione.
Il file viene trasferito automaticamente nell’Isolated Storage
Analoga a WebClient e HttpWebRequest, ma più semplice da usare
e in grado di proseguire il trasferimento anche ad applicazione
chiusa.
Limite di 20 MB se connessi a rete 3G
Limite di 2 GB se connessi a rete Wi-Fi
![Page 27: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/27.jpg)
Background Transfer
void Download(Uri sourceUri, Uri destinationPath){
btr = newBackgroundTransferRequest(sourceUri, destinationUri);
btr.TransferStatusChanged += BtsStatusChanged;btr.TransferProgressChanged += BtsProgressChanged;BackgroundTransferService.Add(btr);
}
using Microsoft.Phone.BackgroundTransfer;
TransferStatusChanged: lo stato del trasferimento
cambia. TransferProgressChanged : la quantità di dati
trasferita è cambiata.
![Page 28: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/28.jpg)
Nuovo metodo di mapping
E’ possibile identificare file e cartelle nell’Isolated
Storage con dei semplici Url
I file scaricati con l’oggetto BackgroundTransferRequest vengono copiati
nella cartella transfers
![Page 29: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/29.jpg)
BACKGROUND AUDIO
Come realizzare il proprio player audio personalizzato
![Page 30: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/30.jpg)
Background audio
Il servizio di background audio è un tipo
particolare di background agent.
Consente la riproduzione di audio anche ad
applicazione chiusa.
Permette di agganciarsi alla barra di controllo
del volume, così da poter controllare la
riproduzione senza entrare nell’applicazione.
Siamo noi, nel background agent, a decidere
la logica da associare ai pulsanti Play, Rev e
Forward della barra di controllo
![Page 31: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/31.jpg)
Background audio – L’applicazione
Si recupera l’istanza della classe BackgroundAudioPlayer
Ci si sottoscrive all’evento PlayStateChanged,
che viene invocato quando lo stato della
riproduzione cambia
Tipicamente, contiene solo la logica che gestisce la
UI
![Page 32: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/32.jpg)
Background audio – L’applicazione
![Page 33: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/33.jpg)
Background audio – L’agent
OnUserAction gestisce tutte le interazioni
dell’utente con l’applicazione e con la barra del
volume.
OnPlayStateChanged viene invocato nel
momento in cui lo stato della riproduzione cambia.
Gestisce i casi in cui lo stato cambia senza
intervento dell’utente.
![Page 34: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/34.jpg)
OnUserAction
![Page 35: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/35.jpg)
OnPlayStateChanged
![Page 36: Deep multitasking in Windows Phone Codename "Mango"](https://reader033.vdocuments.mx/reader033/viewer/2022052911/559fad6d1a28abd6438b47e5/html5/thumbnails/36.jpg)
Domande?
Mobile Software Engineer @ Gaia
Microsoft MVP – Device Application Development
Twitter: @qmatteoq
Facebook: http://www.facebook.com/matteo.pagani
Blog: http://qmatteoq.tostring.it
E-mail: [email protected]
Matteo Pagani