Il Ciclo di Vita Fast Application Switching e Fast Resume

Post on 31-Jul-2015

458 views 2 download

Transcript of Il Ciclo di Vita Fast Application Switching e Fast Resume

IL CICLO DI VITA: FAST APPLICATION SWITCHING E FAST RESUME

Dan Ardelean Nokia Developer Champion dan@xpresscode.eu 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: dan@xpresscode.eu Twitter: @danardelean