Il ciclo di vita fast application switching e fast resume
1. NOKIA WEBINAR
IL CICLO DI VITA:
FAST APPLICATION
SWITCHING E FAST RESUME
Dan Ardelean
Nokia Developer Champion
dan@xpresscode.eu Twitter: @danardelean
3. LE BASI
•
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
4. STACK DI NAVIGAZIONE
•
Possiamo manualmente rimuovere elementi dallo stack
private void PurgeBackStackButton_Click(object sender, RoutedEventArgs
e)
{
while (NavigationService.CanGoBack)
NavigationService.RemoveBackEntry();
}
•
•
Non possiamo manualmente aggiungere elementi
Le pagine possono essere notificate se vengono rimosse dallo stack
protected override void OnRemovedFromJournal(JournalEntryRemovedEventArgs
e)
{
base.OnRemovedFromJournal(e);
}
7. DORMANT
Not running
Istanza in memoria
Closing
Stato applicazione, data e oggetti non vengono
modificati
Deve essere pronta per essere chiusa
Launching
Running
Activating
Deactivating
Dormant
9. TOMBSTONED
Da Dormant a Tombstone «memory based»
Not running
Salva i dizionari di stato e lo stack di navigazione
Bisogna ricaricare i dati
Launching
Closing
Running
Activating
Deactivating
Dormant
Tombstoned
11. FAST APPLICATION RESUME
Not running
Riattiva l’istanza dormant se l’utente lancia una
nuova istanza
Closing
Necessario per le applicazioni che fanno
tracking della posizione e non solo
Launching
Running
Activating
Deactivating
Dormant
Tombstoned
20. FAST APPLICATION RESUME
•
Riattiva l’istanza Dormant, se esiste, quando l’utente lancia nuovamente
l’applicazione
•
Per abilitare la funzionalità bisogna modificare
PropertiesWMAppManifest.xml
<Tasks>
<DefaultTask
</Tasks>
Name ="_default" NavigationPage="MainPage.xaml"
ActivationPolicy="Resume">
21.
22. OBSCURED & UNOBSCURED
•
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
•
PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled;
•
Per disabilitare il Lockscreen
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
23. ASYNC E AWAIT
•
Cosa succede quando usiamo async e await per Application_Closing e
Application_Deactivate?
•
Meccanismo per applicazioni Windows Store
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: Save application state and stop any background activity.
await ExecuteAsync();
deferral.Complete();
Attenzione per la userexperienceVengono aggiunte quando navighiamo
Solo una sola applicazione in Foreground
Back nellapaginainizialedella app chiudel’applicazioneL’applicazione viene sospesa quando non ha più focusSe l’istanza dormant non viene più riattivata Application_Closing = Application_DeactivatedDormant eventi utenti o esterni – chiamata, lockscreen
Dormant siriattivano molto veloceSe la cache si riempia l’applicazione dormant viene tombstonedUna volta dormant non esiste la garanzia che l’istanza verrà riattivataFino 8 applicazioni nello stack
Processo viene terminato l’istanza viene mantenutaIl sistema operativo ha bisogno di più risorse
Il programmatoredevegestire le due situazioni in mododiversoQuando un utentelanciaunanuovaistanza: start screen, listaapplicazioni o deep link: secondary tile, reminder speech input, file o protocol association se esisteunaistanzasospesavienecancellata/scartata
Da usare con prudenza ma vedremmo più avanti perché – User Experience «strana»Ci sono solo 2 casi quando non abbiamo eventi quando l’applicazione va in eccezione ho viene chiamata Application.Terminate
Tombstone sempre prima dello stack8 applicazione dentro backstack
Lancio costruttore second pageAttenzione Non siamo passati per MainPage
Singola pagina 2MBTutta l’istanza 4MBTroppi dati: consuma batteria, incrementa il tempo di pause/ripristino
Tombstone sempre prima dello stack8 applicazione dentro backstack
L’utente ripristina le risorse OnNavigatedTo
Start screen, app menu, tilesHo solo l’evento di Application_Activated – no Application_Launching no costruttoreBisogna fare edit a mano del file
RootFrame_Navigating per la demo non dimenticare
Incoming SMS non alza l’evento ObscuredNon sempre esiste un matchingObscured & UnobscuredEsempio motion in un gioco meglio disabilitare lockscreen