il ciclo di vita fast application switching e fast resume
TRANSCRIPT
IL CICLO DI VITA: FAST APPLICATION SWITCHING E FAST RESUME
Dan Ardelean Nokia Developer Champion [email protected] Twitter: @danardelean
NOKIA WEBINAR
Stack di navigazione Launching & Closing Dormant & Tombstoned Dizionari di stato Fast Application Resume Obscured & Unobscured Async & await
AGENDA
• Modello di navigazione Page-Based
• Per implementare questo modello di navigazione ogni applicazione ha uno «Back Stack»
• Navigazione verso una nuova pagina la vecchia viene inserita in Back Stack • Quando viene premuto il tasto Back o chiamato il metodo GoBack l’applicazione ritorna
alla prima pagina dentro Back Stack • Se Back Stack è vuoto quando si naviga indietro l’applicazione viene chiusa
LE BASI
• Possiamo manualmente rimuovere elementi dallo stack
• Non possiamo manualmente aggiungere elementi • Le pagine possono essere notificate se vengono rimosse dallo stack
STACK DI NAVIGAZIONE
private void PurgeBackStackButton_Click(object sender, RoutedEventArgs e) { while (NavigationService.CanGoBack) NavigationService.RemoveBackEntry(); }
protected override void OnRemovedFromJournal(JournalEntryRemovedEventArgs e) { base.OnRemovedFromJournal(e); }
Not running
Running
Launching
LANCIO APPLICAZIONE
Not running
Running
Launching Closing
Deactivating
Dormant
Exit Application_Closing
Deactivate Application_Deactivated Dormant
CHIUSURA & DISATTIVAZIONE
Istanza in memoria Stato applicazione, data e oggetti non vengono
modificati Deve essere pronta per essere chiusa
DORMANT Not running
Running
Launching Closing
Deactivating Activating
Dormant
Attiv
a D
orm
ant
Tom
bsto
ned
Tombstoned
Not running
Running
Launching Closing
Deactivating Activating
Dormant
Da Dormant a Tombstone «memory based» Salva i dizionari di stato e lo stack di navigazione Bisogna ricaricare i dati
TOMBSTONED
Tombstoned
Not running
Running
Launching Closing
Deactivating Activating
Dormant
TOMBSTONED O DORMANT? private void Application_Activated(object sender, ActivatedEventArgs e) { if (e.IsApplicationInstancePreserved) { // Dormant } else { // Tombstoned } }
Riattiva l’istanza dormant se l’utente lancia una nuova istanza
Necessario per le applicazioni che fanno
tracking della posizione e non solo
FAST APPLICATION RESUME
Tombstoned
Not running
Running
Launching Closing
Deactivating Activating
Dormant
TERMINAZIONE NORMALE
M
O
O
O
DORMANT
O
O
O
IsApplicationInstancePreserved==true
TOMBSTONED
O
O
IsApplicationInstancePreserved ==false
M
O
TOMBSTONED
O
O
O
o
O
• 3 Dizionari
• Pagina: PhoneApplicationPage.State
• Istanza app
PhoneApplicationService.Current.State
• Applicazione
System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings
STATO APPLICAZIONE
MANAGEMENT DELLE RISORSE
O
O
MediaPlayer.Pause MediaElement.Pause VibrateController.Stop Photocamera.Dispose
MANAGEMENT DELLE RISORSE
O
Socket rimangano scollegati MediaElement non connesso Photocamera disposed
• Riattiva l’istanza Dormant, se esiste, quando l’utente lancia nuovamente l’applicazione
• Per abilitare la funzionalità bisogna modificare Properties\WMAppManifest.xml
FAST APPLICATION RESUME
<Tasks> <DefaultTask Name ="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume"> </Tasks>
• Quando l’interfaccia utente viene oscurata: notifiche toast, lockscreen, chiamata in arrivo
• L’applicazione continua girare in background • Per far girare l’applicazione dietro Lockscreen
• Per disabilitare il Lockscreen
OBSCURED & UNOBSCURED
PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
• Cosa succede quando usiamo async e await per Application_Closing e Application_Deactivate?
• Meccanismo per applicazioni Windows Store
ASYNC E AWAIT
var deferral = e.SuspendingOperation.GetDeferral(); //TODO: Save application state and stop any background activity. await ExecuteAsync(); deferral.Complete();
10/1/2013 © 2013 Nokia. All rights reserved. © 2013 Microsoft. All rights reserved.
Grazie! Blog: sviluppomobile.blogspot.com Email: [email protected] Twitter: @danardelean