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
Agenda
Fast App Switching
Application lifecycle
Alarms
Reminders
Background Agents
Background Transfer
Background Audio
FAST APP SWITCHING
Passare velocemente da una applicazione all’altra
Application lifecycle di Windows Phone
Running
Deactivated
Tombstoned
Activated
Save stateRestore state
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.
Application lifecycle di Mango
Running
Deactivated
Dormant
Activated
TombstonedSave state
Restore
state
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
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
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 -
Fast App Switcher
Tenendo premuto il
pulsante Back del
device, si attiva il Fast App
Switcher, che permette di
sportarci velocemente tra
le applicazioni.
Debugging
Di default, le applicazioni vanno in stato Dormant.
Tramite una proprietà del progetto di Visual Studio, è
possibile forzare lo stato Tombstoned.
ALARMS & REMINDERS
Per gli utenti smemorati
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
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
BACKGROUND AGENTS
Eseguiamo operazioni in background
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.
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
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.
Periodic agent
Sono oggetti di tipo PeriodicTask
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
Resource Intensive agent
Sono oggetti di tipo ResourceIntensiveTask
Il file di manifest
Vengono dichiarati nel file di manifest
dell’applicazione Windows Phone
Background agent
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
BACKGROUND TRANSFER
Un nuovo modo di trasferire file
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
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.
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
BACKGROUND AUDIO
Come realizzare il proprio player audio personalizzato
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
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
Background audio – L’applicazione
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.
OnUserAction
OnPlayStateChanged
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
Top Related