Deep multitasking in Windows Phone Codename "Mango"

Post on 10-Jul-2015

1.082 views 4 download

Transcript of 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: info@qmatteoq.com

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: info@qmatteoq.com

Matteo Pagani