Upload
dan-ardelean
View
103
Download
0
Embed Size (px)
Citation preview
IL CICLO DI VITA:FAST APPLICATION SWITCHING E FAST RESUMEDan ArdeleanNokia Developer [email protected] Twitter: @danardelean
NOKIA WEBINAR
Stack di navigazioneLaunching & ClosingDormant & TombstonedDizionari di statoFast Application ResumeObscured & UnobscuredAsync & 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
LaunchingClosing
Deactivating
Dormant
ExitApplication_Closing
DeactivateApplication_Deactivated
Dormant
CHIUSURA & DISATTIVAZIONE
Istanza in memoria
Stato applicazione, data e oggetti non vengono modificati
Deve essere pronta per essere chiusa
DORMANTNot running
Running
LaunchingClosing
DeactivatingActivating
Dormant
Att
iva
Dorm
an
tTo
mbst
oned
Tombstoned
Not running
Running
LaunchingClosing
DeactivatingActivating
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
LaunchingClosing
DeactivatingActivating
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
LaunchingClosing
DeactivatingActivating
Dormant
Dormant/TombstonedDEMO
TERMINAZIONE NORMALEUtente MainPagePhone OS Applicazion
eLancio l’applicazione
Costruttore applicazione App()
Application_Launching
Costruttore MainPage
MainPage OnNavigatedTo
Utilizzo applicazione
Back
MainPage OnNavigatingFrom
MainPage OnNavigatedFrom
Application_Closing
DORMANTUtente MainPagePhone OS Applicazion
e
Utilizzo applicazione
Start
MainPage OnNavigatingFrom
MainPage OnNavigatedFrom
Application_DeactivatedBack
Application_Activated
MainPage OnNavigatedTo
Utilizzo applicazione
IsApplicationInstancePreserved==true
Application_Activated
TOMBSTONEDUtente MainPagePhone OS Applicazion
eUtilizzo applicazione
Start
MainPage OnNavigatingFrom
MainPage OnNavigatedFrom
Application_Deactivated
Back
IsApplicationInstancePreserved==false
Processo terminato
Costruttore applicazione App()
Costruttore MainPageMainPage OnNavigatedTo
Utilizzo applicazione
Application_Activated
TOMBSTONEDUtente MainPagePhone OS Applicazion
eUtilizzo applicazioneIn-App
Navigation SecondPage Costruttore
MainPage OnNavigatedFrom
Application_Deactivated
Start
Processo terminato
Costruttore App()
Costruttore MainPage
MainPage OnNavigatedTo
SecondPage
SecondPage OnNavigatedTo
Back
SecondPage Costruttore
SecondPage OnNavigatedToBack
SecondPage OnNavigatedFrom
• 3 Dizionari
• Pagina:PhoneApplicationPage.State
• Istanza appPhoneApplicationService.Current.State
• ApplicazioneSystem.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings
STATO APPLICAZIONE
Sospensione Timers e Thread
MANAGEMENT DELLE RISORSEUtente MainPagePhone OS Applicazion
eUtilizzo applicazione
Start
MainPage OnNavigatingFrom
MainPage OnNavigatedFrom
Application_Deactivated
Rilascio risorse
MediaPlayer.PauseMediaElement.PauseVibrateController.StopPhotocamera.Dispose
Set to Dormant state
Rilascio risorseXNA Audio in pausaNessuna notifica dagli sensoriInterrompe le chiamate di reteScollega socketScollega mediaDispose Photocamera
Ripristino Timers e Thread
MANAGEMENT DELLE RISORSEUtente MainPagePhone OS Applicazion
e
Back
MainPage OnNavigatedTo
Application_Activated
Ripristino risorse
MediaPlayer.PlaySocket.ConnectAsyncnew PhotoCamera
Ripristino risorse XNA Audio in play
Ripristina notifiche dagli sensoriRipristina le chiamate di rete
Socket rimangano scollegatiMediaElement non connessoPhotocamera 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>
Fast Application ResumeDEMO
• 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();
04/11/2023© 2013 Nokia. All rights reserved.© 2013 Microsoft. All rights reserved.
Grazie!
Blog: sviluppomobile.blogspot.comEmail: [email protected]: @danardelean