Deep multitasking in Windows Phone Codename "Mango"

1,336 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,336
On SlideShare
0
From Embeds
0
Number of Embeds
184
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Deep multitasking in Windows Phone Codename "Mango"

  1. 1. Deep multitasking in Windows Phone codename «Mango»<br />MatteoPagani<br />Mobile Software Engineer @ Gaia<br />Microsoft MVP – Device Application Development<br />Twitter: @qmatteoq<br />Facebook: http://www.facebook.com/matteo.pagani<br />Blog: http://qmatteoq.tostring.it<br />E-mail: info@qmatteoq.com<br />
  2. 2. Agenda<br /><ul><li>Fast App Switching
  3. 3. Application lifecycle
  4. 4. Alarms
  5. 5. Reminders
  6. 6. Background Agents
  7. 7. Background Transfer
  8. 8. Background Audio</li></li></ul><li>Passare velocemente da una applicazione all’altra<br />Fast app switching<br />
  9. 9. Application lifecycle di Windows Phone <br />Save state<br />Restore state<br />
  10. 10. Application lifecycle di Windows Phone <br />Deactivated<br /><ul><li>Occorre salvare lo stato della nostra applicazione.</li></ul>Tombstoned<br /><ul><li>Il processo viene terminato.</li></ul>Activated<br /><ul><li>L’applicazione viene instanziata da zero.
  11. 11. Viene recuperato lo stato salvato in precedenza.</li></li></ul><li>Application lifecycle di Mango<br />Tombstoned<br />Restore state<br />Save state<br />
  12. 12. Applicatione lifecycle di Mango<br />Deactivated<br /><ul><li>Occorre comunque salvare lo stato della nostra applicazione</li></ul>Dormant<br /><ul><li>Il processo non viene terminato, ma rimane in background
  13. 13. Vengono terminati tutti i thread e i timer in esecuzione
  14. 14. Vengono scollegate tutte le risorse in uso (camera, rete, ecc.)</li></ul>Tombstoned<br /><ul><li>In caso ci sia bisogno di risorse, le applicazioni dormant più vecchie vengono comunque mandate in tombstone.</li></ul>Activated<br /><ul><li>La proprietà IsApplicationInstancePreservedci dice se l’applicazione è andata in tombstoned oppure no.
  15. 15. In caso sia a false,occorre recuperare lo stato dal tombstone.</li></li></ul><li>Deactivated<br />Windows Phone si incarica di disconnettere e fermare tutto ciò che possa consumare risorse in eccesso.<br />
  16. 16. Activated<br />Non tutte le risorse vengono riattivate in automatico: alcune devono essere manualmente riattivate dall’applicazione.<br />
  17. 17. Fast App Switcher<br />Tenendo premuto il pulsante Back del device, si attiva il Fast App Switcher, che permette di sportarci velocemente tra le applicazioni.<br />
  18. 18. Debugging<br /><ul><li>Di default, le applicazioni vanno in stato Dormant.
  19. 19. Tramite una proprietà del progetto di Visual Studio, è possibile forzare lo stato Tombstoned.</li></li></ul><li>Per gli utenti smemorati<br />ALARMS & REMINDERS<br />
  20. 20. Alarms<br />usingMicrosoft.Phone.Scheduler;<br />privatevoidAddAlarm(object sender, RoutedEventArgs e)<br />{<br /> Alarmalarm = newAlarm(“Alarm");<br />alarm.BeginTime= DateTime.Now.AddSeconds(15);<br />alarm.Content= “Questo è un alarm";<br />ScheduledActionService.Add(alarm);<br />}<br />Semplice promemoria con i pulsanti snooze e dismiss, possibilità di impostare un suono personalizzato<br />
  21. 21. Reminders<br />usingMicrosoft.Phone.Scheduler;<br />privatevoidAddReminder(object sender, RoutedEventArgs e)<br />{<br />Reminderreminder = newReminder(“Reminder");<br />reminder.BeginTime = DateTime.Now.AddSeconds(15);<br />reminder.Content = “Questo è iltitolo del reminder";<br />reminder.Title = “Questa è la descrizione del reminder";<br />reminder.RecurrenceType = RecurrenceInterval.Yearly;<br />reminder.NavigationUri= newUri("/Reminder.xaml", UriKind.Relative);<br />ScheduledActionService.Add(reminder);<br />}<br />Promemoria con snooze personalizzabile e deep link<br />
  22. 22. Eseguiamo operazioni in background<br />BACKGROUND AGENTS<br />
  23. 23. Background agents<br /><ul><li>Un progetto Visual Studio separato da quello dell’applicazione vera e propria.
  24. 24. Vengono istanziati dall’applicazione foreground ma eseguiti in background quando questa non è esecuzione.
  25. 25. Due tipi di agents: Periodic e Resource Intensive.
  26. 26. Possono coesistere massimo 18 agents contemporaneamente.
  27. 27. L’utente può abilitarli o disabilitarli da un apposito pannello di controllo.
  28. 28. Vengono disattivati dopo 14 giorni che l’applicazione collegata non viene utilizzata.</li></li></ul><li>Cosa possono fare?<br />Non consentito<br />Consentito<br /><ul><li>Tiles
  29. 29. Toast
  30. 30. Servizi di localizzazione
  31. 31. Connettività
  32. 32. Accessoall’Isolated Storage
  33. 33. Sockets
  34. 34. La maggior parte delle API
  35. 35. Interagire con la UI
  36. 36. Librerie XNA
  37. 37. Microfono e fotocamera
  38. 38. Sensori
  39. 39. Riprodurre audio senzal’ausiliodelle apposite API per il background audio</li></li></ul><li>Periodic agents<br /><ul><li>Vengono eseguiti ogni 30 minuti
  40. 40. Possono eseguire operazioni per un tempo massimo di 15 secondi
  41. 41. Se il device è in uso, vengono eseguiti uno alla volta
  42. 42. Se il device è in stand by, vengono eseguiti in parallelo
  43. 43. Nascono per task di sincronizzazione veloce, geo localizzazione, notifiche, ecc. </li></li></ul><li>Periodic agent<br />Sono oggetti di tipo PeriodicTask<br />
  44. 44. Resource Intensive agents<br /><ul><li>Vengono eseguiti solo nel momento in cui il device è in ricarica (collegato al pc o ad una presa di corrente)
  45. 45. Il device deve essere collegato ad una rete Wi-Fi
  46. 46. Possono eseguire operazioni per un tempo massimo di 10 minuti
  47. 47. Nascono per task di sincronizzazioni di grandi quantità di dati</li></li></ul><li>Resource Intensive agent<br />Sono oggetti di tipo ResourceIntensiveTask<br />
  48. 48. Il file di manifest<br />Vengono dichiarati nel file di manifest dell’applicazione Windows Phone<br />
  49. 49. Background agent<br />
  50. 50. Qualche dettaglio tecnico<br /><ul><li>Ereditano da ScheduledTaskAgent
  51. 51. Il metodo OnInvokedefinisce le operazioni da compiere quando l’agent viene eseguito
  52. 52. Il metodo opzionale OnCancelviene invocato nel momento in cui lo slot di tempo assegnato all’agent si sta esaurendo</li></li></ul><li>Un nuovo modo di trasferire file<br />Background transfer<br />
  53. 53. Background Transfer<br /><ul><li>Una nuova classe per gestire il download e upload di file all’interno dell’applicazione.
  54. 54. Il file viene trasferito automaticamente nell’Isolated Storage
  55. 55. Analoga a WebClient e HttpWebRequest, ma più semplice da usare e in grado di proseguire il trasferimento anche ad applicazione chiusa.
  56. 56. Limite di 20 MB se connessi a rete 3G
  57. 57. Limite di 2 GB se connessi a rete Wi-Fi</li></li></ul><li>Background Transfer<br />usingMicrosoft.Phone.BackgroundTransfer;<br />void Download(UrisourceUri, UridestinationPath)<br />{<br />btr= newBackgroundTransferRequest(sourceUri, destinationUri);<br />btr.TransferStatusChanged += BtsStatusChanged;<br />btr.TransferProgressChanged+= BtsProgressChanged;<br />BackgroundTransferService.Add(btr);<br />}<br /><ul><li>TransferStatusChanged: lo stato del trasferimento cambia.
  58. 58. TransferProgressChanged: la quantità di dati trasferita è cambiata.</li></li></ul><li>Nuovo metodo di mapping<br /><ul><li>E’ possibile identificare file e cartelle nell’Isolated Storage con dei semplici Url
  59. 59. I file scaricati con l’oggetto BackgroundTransferRequestvengono copiati nella cartella transfers</li></li></ul><li>Come realizzare il proprio player audio personalizzato<br />Background AUDIO<br />
  60. 60. Background audio<br /><ul><li>Il servizio di background audio è un tipo particolare di background agent.
  61. 61. Consente la riproduzione di audio anche ad applicazione chiusa.
  62. 62. Permette di agganciarsi alla barra di controllo del volume, così da poter controllare la riproduzione senza entrare nell’applicazione.
  63. 63. Siamo noi, nel background agent, a decidere la logica da associare ai pulsanti Play, Rev e Forward della barra di controllo</li></li></ul><li>Background audio – L’applicazione<br /><ul><li>Si recupera l’istanza della classe BackgroundAudioPlayer
  64. 64. Ci si sottoscrive all’evento PlayStateChanged, che viene invocato quando lo stato della riproduzione cambia
  65. 65. Tipicamente, contiene solo la logica che gestisce la UI</li></li></ul><li>Background audio – L’applicazione<br />
  66. 66. Background audio – L’agent<br /><ul><li>OnUserActiongestisce tutte le interazioni dell’utente con l’applicazione e con la barra del volume.
  67. 67. OnPlayStateChangedviene invocato nel momento in cui lo stato della riproduzione cambia. Gestisce i casi in cui lo stato cambia senza intervento dell’utente.</li></li></ul><li>OnUserAction<br />
  68. 68. OnPlayStateChanged<br />
  69. 69. Domande?<br />MatteoPagani<br />Mobile Software Engineer @ Gaia<br />Microsoft MVP – Device Application Development<br />Twitter: @qmatteoq<br />Facebook: http://www.facebook.com/matteo.pagani<br />Blog: http://qmatteoq.tostring.it<br />E-mail: info@qmatteoq.com<br />

×