Deep multitasking in Windows Phone Codename "Mango"

36
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

Transcript of Deep multitasking in Windows Phone Codename "Mango"

Page 1: Deep multitasking in Windows Phone Codename "Mango"

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"

Agenda

Fast App Switching

Application lifecycle

Alarms

Reminders

Background Agents

Background Transfer

Background Audio

Page 3: Deep multitasking in Windows Phone Codename "Mango"

FAST APP SWITCHING

Passare velocemente da una applicazione all’altra

Page 4: Deep multitasking in Windows Phone Codename "Mango"

Application lifecycle di Windows Phone

Running

Deactivated

Tombstoned

Activated

Save stateRestore state

Page 5: Deep multitasking in Windows Phone Codename "Mango"

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"

Application lifecycle di Mango

Running

Deactivated

Dormant

Activated

TombstonedSave state

Restore

state

Page 7: Deep multitasking in Windows Phone Codename "Mango"

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"

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"

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"

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"

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"

ALARMS & REMINDERS

Per gli utenti smemorati

Page 13: Deep multitasking in Windows Phone Codename "Mango"

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"

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"

BACKGROUND AGENTS

Eseguiamo operazioni in background

Page 16: Deep multitasking in Windows Phone Codename "Mango"

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"

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"

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"

Periodic agent

Sono oggetti di tipo PeriodicTask

Page 20: Deep multitasking in Windows Phone Codename "Mango"

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"

Resource Intensive agent

Sono oggetti di tipo ResourceIntensiveTask

Page 22: Deep multitasking in Windows Phone Codename "Mango"

Il file di manifest

Vengono dichiarati nel file di manifest

dell’applicazione Windows Phone

Page 23: Deep multitasking in Windows Phone Codename "Mango"

Background agent

Page 24: Deep multitasking in Windows Phone Codename "Mango"

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"

BACKGROUND TRANSFER

Un nuovo modo di trasferire file

Page 26: Deep multitasking in Windows Phone Codename "Mango"

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"

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"

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"

BACKGROUND AUDIO

Come realizzare il proprio player audio personalizzato

Page 30: Deep multitasking in Windows Phone Codename "Mango"

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"

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"

Background audio – L’applicazione

Page 33: Deep multitasking in Windows Phone Codename "Mango"

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"

OnUserAction

Page 35: Deep multitasking in Windows Phone Codename "Mango"

OnPlayStateChanged

Page 36: Deep multitasking in Windows Phone Codename "Mango"

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