Ciclo di vita di una applicazione Windows Phone Store
-
Upload
dan-ardelean -
Category
Mobile
-
view
66 -
download
0
Transcript of Ciclo di vita di una applicazione Windows Phone Store
Dan ArdeleanMicrosoft MVP & Nokia ChampionEmail: [email protected]: @danardelean
Ciclo di vita di una applicazione Windows Phone Store
WinRT Apps
24/04/2014
//learn
Parliamo di…
Ciclo di vita di una applicazione Windows XAMLLaunchSuspendResumeTermination
Salvataggio e ripristino dello stato di una applicazione
Ciclo di vita?Le risorse del telefono sono limitate (soprattutto durata della batteria)
Una sola applicazione ha il primo piano
Le alte applicazioni sono sospese e/o terminate
S.O. ha meccanismi per far girare del codice in background
S.O. ha dei meccanismi per far sembrare una applicazione “viva”
Ciclo di vita?
Ciclo di vita simile a quello delle applicazioni Windows 8.1
Diverso da quello delle applicazioni Windows Phone 8.0
Concetti compatibili con lo sviluppo di applicazioni mobile
Differenze soprattutto per il tipo di hardware supportato dai telefoni e per la retro compatibilità con le applicazioni WP8.0, WP7.x
launch, suspend, resume
L’utente lancia un’applicazione
Lancio
NotRunning Running
Evento Application.OnLaunched
sealed partial class App : Application { /// <summary> /// Invoked when the application is launched normally by the end user. /// </summary> /// <param name="e">Details about the launch request and process.</param> protected override async void OnLaunched(LaunchActivatedEventArgs e) { // How did the app exit the last time it was run (if at all) ApplicationExecutionState previousState = e.PreviousExecutionState;
// What kind of launch is this? ActivationKind activationKind = e.Kind;
// ...
NotRunningRunning
SuspendedTerminated
ClosedByUser
LaunchFile
ProtocolVoiceCommand
Etc.
L’utente naviga verso un’altra applicazione
L’applicazione viene sospesa
Il codice viene interrotto
Timer interni sospesi
Nessun evento viene sollevato
Processo ancora vivo in memoria
Possiamo gestire la sospensione
Navigazione esterna
Evento Application.Suspending
sealed partial class App : Application { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } private async void OnSuspending(object sender, SuspendingEventArgs e) { // Ask for a deferral if you need to do async work var deferral = e.SuspendingOperation.GetDeferral();
// TODO: whatever async work you need to do when suspending
deferral.Complete(); // Then mark the deferral complete }
Tempo di sospensione limitato. Poco codice in questo metodo migliora la ‘user experience’
NB: Si usa deferral se bisogna chiamare dei metodi async. Il tempo di sospensione rimane lo stesso.
L’utente ‘torna’ nella nostra applicazione
L’applicazione viene ripristinata
Stesso processo, stesso stato della memoria
Il nostro codice inizia a girare
L’applicazione viene notificata
Lancio Indietro Task manager
Evento Application.Resuming
sealed partial class App : Application { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; this.Resuming += OnResuming; }
private void OnResuming(object sender, object e) { // TODO: whatever you need to do to resume your app }
Simulazione suspend/resume per debug
In modalità debug l’app non viene sospesa/ripristinata Bisogna usare le funzioni del debugger per simulare suspend/resume
Cosa fare quando l’applicazione viene ripristinata?Verificare cosa è cambiato da quando l’applicazione è stata sospesa
Esempi (gli stessi di http://bit.ly/w8Resuming):aggiornamenti dati da sorgenti esterniverificare lo stato della connettività: online o offline?aggiornamento dati ricevuti dai sensori come bussola, geo localizzazioneRipristinare la connessione di reteaggiornamento layoutGestire nuovi dati inseriti da background task o impostazioni roaming
L’applicazione potrebbe essere chiusa dall’utente
Close
Running
ClosedByUser
NB: Il pulsante Indietro non chiude l’applicazione
Demo
Termination
SO può terminare una applicazione sospesa
Utente lancia un’altraapplicazione
OS ha poca memoriadisponibile
SO termina una applicazionesospesa in memoria
Terminated
SO ha un schema di priorità per determinare l’applicazione da terminare
SO non notifica l’applicazione che andrà essere chiusaL’applicazione viene rimossa dallo task switcher
SO può terminare una applicazione sospesa
L’utente ‘ritorna’ ad una applicazione chiusa
L’utente non sa che l’applicazione è stata chiusa
Di solito si aspetta di riprendere da dove era rimasto
Lo sviluppatore deve mantenere l’illusione che l’applicazione ha continuato a girare in background
L’utente ‘ritorna’ ad una applicazione chiusa
L’utente non deve perdere dati e dovrebbe poter continuare le attività ‘recenti’
In alcuni casi l’applicazione deve ripristinare lo stack di navigazione e lo stato della sessione precedente
La gestione del ripristino dipende dal tipo di applicazione
Dati temporanei vs dati persistenti
App Data Local Folder(or roaming folder for Data)
12:38
12:38
Jim JonesTel: 0111 222 333
Bob BrownTel: 0444 555 666
Arthur AbbottTel: 0777 888 999
CONTACTS
all 12:38
12:38
Work Tel: 0111 222 333
HomeTel: 0444 555 666
CONTACTS
Jim Jones
12:38
CONTACTS
Add PhoneMobile Phone
Phone type
Phone number0888 777
StateNavigate(Page2, ID
param)Navigate(Page3, ID
param)
Data
Demo
La classe Frame ha 2 metodi [Get/Set]NavigationState per gestire la cronologia di navigazione usando una variabile di tipo StringLa classe SuspensionManager aiuta salvare/ripristinare dentro un file lo stato globale & Frame La classe NavigationHelper college la Page a SuspensionManager via eventi locali a livello di pagina
Aiuti da framework & templates
Demo
Sessioni da seguire
17:30 Attività in background Marco dal Pino
18:00 Tiles, badges, Toasts and Action CenterMichele Locuratolo
Application Lifecycle in Silverlight AppsBuilding Apps for Windows Phone 8 Jump Start - Session 5: Windows Phone 8 Application Lifecyclehttp://aka.ms/Tsatr4
04/11/2023 28
© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.The information contained in this document represents the current view of Microsoft Corp. on the issues discussed as of the dateof publication. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitmenton the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication.This guide is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT.Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no partof this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form, by any means (electronic, mechanical, photocopying, recording or otherwise), or for any purpose, without the express written permission of Microsoft.Microsoft may have patents, patent applications, trademarks, copyrights or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights or other intellectual property.The example companies, organizations, products, domain names, email addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.