presenta – #wpc15it1 Dalla sospensione all’esecuzione in background: il ciclo di vita di una Universal Windows app Matteo Pagani Windows AppConsult Microsoft Mail: –
Agenda Ciclo di vita delle app Background task Web of App –
ONE WINDOWS Phone Desktops & All-in-Ones Classic Laptop Xbox Tablet
La gestione del ciclo di vita Universal Windows App: Il sistema è in grado di controllare il ciclo di vita Windows Desktop app L’utente controlla il ciclo di vita
Il ciclo di vita di un’app Running Not Running … Suspended In caso di esaurimento risorse, l’app viene terminata senza preavviso L’app viene sospesa dopo breve tempo L’app ritorna attiva immediatamente
Le risorse di sistema vengono concentrate sull’applicazione con cui l’utente sta interagendo Le applicazioni sospese non hanno impatto sulla batteria o sulla responsività dell’applicazione attiva Consente lo switch immediato tra le app Le app su desktop vengono sospese quando sono minimizzate nella taskbar Sospensione
Le applicazione sospese non vengono schedulate dal kernel Nessun consumo di CPU, disco o rete Tutti i thread vengono sospesi Le applicazioni rimangono in memoria Le applicazioni vengono ripristinate istananeamente quando vengono riattivate Sospensione dietro le quinte
L’utente ha esplicitamente chiuso l’app Il sistema ha bisogno di più memoria L’utente cambia l’applicazione in uso L’app va in crash L’utente si disconnette o spegne il device Terminazione Le applicazioni non vengono notificate quando stanno per essere terminate
Gestione del ciclo di vita DEMO Extended Execution
Best practice nella gestione dello stato ScenarioSuggerimento L’utente sta utilizzando l’applicazione Salva i dati in maniera incrementale Applicazione sospesa Salva lo stato corrente della pagina e dove si trova l’utente Applicazione riattivata da una terminazione Ripristina lo stato precedente, come se l’utente non avesse mai lasciato l’app Applicazione riattivata da una sospensione A discrezione, in base all’app
… e se avessi bisogno di più tempo?
Possibilità di continuare una sessione quando l’app non è in primo piano Scenari: Tracking della posizione Salvataggio dati critici Necessità di maggiore tempo per terminare un’operazione in corso Extended Execution
Le applicazioni devono specificare il motivo Una volta revocata l’esecuzione, l’app ha disposizione ~1 secondo per fare clean up Viene garantito un tempo di esecuzione minimo, dopodichè si decide in base alle risorse di sistema Qualche dettaglio
Extended Execution (1. aspetta!) Memory In esecuzione Estensione Sospensione (5 secondi) Richiesta Revoca (1 secondo) Sospesa No UI Sospensione (Nessuna notifica) In fase di sospensi one
Extended Execution (2. continua) Memory In esecuzione Estensione Sospensione dell’app Richiesta di estensione Revoca Sospensione No UI Sospensione Estensione automatica In fase di esecuzion e
Extended execution DEMO Extended Execution
Background Task Come eseguire codice quando l’app non è in esecuzione
Le applicazioni possono riprodurre audio in background Gli sviluppatori devono dichiarare l’utilizzo di questa funzionalità nel file di manifest Possono esistere differenti tipologie di stream audio (comunicazione, media, gioco), ognuna gestita in maniera differente Solo un tipo di stream audio alla volta può essere mantenuto in background Background audio
La classe BackgroundTransfer è in grado di gestire il trasferimento di dati in upload e e download attraverso un canale HTTP in background L’operazione di download o upload viene avviata dall’applicazione in esecuzione, dopodichè è in grado di continuare anche se questa viene sospesa Il mantenimento dei download e degli upload viene gestito in base alle risorse disponibili nel sistema (esempio: se la modalità Risparmio batteria è attiva, le operazioni vengono interrotte) Upload/Download in Background
Il ciclo di vita dei background task
Yourapp.exe BackgroundTaskHost.exe MyBackgroundTask (Windows Runtime Component) Registrazione e attivazione Windows Create Run()
System Trigger Default: BackgroundTaskHost.exe Windows Runtime Component Configurazione nel manifest Possibilità di avere più task per app
SystemTrigger TimeTrigger MaintenanceTrigger DeviceUseTrigger DeviceServicingTrigger PushNotificationTrigger CachedFileUpdaterTrigger DeviceConnectionChangeTrigger GattCharacteristicNotificationTrigger RfcommConnectionTrigger LocationTrigger AppointmentStoreNotificationTrigger ContactStoreNotificationTrigger StoreNotificationTrigger BluetoothLEAdvertisementWatcherTrigger BluetoothLEAdvertisementPublisherTrigger DeviceWatcherTrigger ActivitySensorTrigger SensorDataThresholdTrigger ToastNotificationHistoryChangedTrigger ToastNotificationActionTrigger ApplicationTrigger MediaProcessingTrigger SocketActivityTrigger Trigger Windows 8.1 WP 8.1
Consentono di evitare l’esecuzione di un task se non sono soddisfatti determinati requisiti Condizioni di sistema CondizioneDescrizione InternetAvailable/InternetNotAvailable Disponibilità connessione a Internet UserPresent/UserNotPresent Presenza dell’utente SessionConnected/SessionDisconnec ted Utente loggato o no FreeNetworkAvailable Disponibilità connessione ad Internet senza costi aggiuntivi BackgroundWorkCostNotHighSolo quando collegato alla corrente
Yourapp.exe BackgroundTaskHost.exe MyBackgroundTask (Windows Runtime Component) Cancel Completed Progress Comunicazione tra app e task Eventi Progress, Completion, Cancellation Windows Cancel
Background task DEMO
Opportunistic Background Task Possono essere eseguiti fintanto che ci sono risorse disponibili Nessuna garanzia di esecuzione ApplicationTrigger, MaintenanceTrigger, DeviceUseTrigger Default Background Task Esecuzione minima garantita di 25 secondi Tutti gli altri trigger: TimeTrigger, PushTrigger… Esempio: device con 512MB di RAM Gestione delle risorse Task type Memory Cap MBLifetimeCPU Block in Batt-Sav Default Background Task1630 sec10%Y Long-Running16∞10%Y
I background task devono essere progettati per completare la loro attività nel minor tempo possibile Background task e applicazione condividono il medesimo contesto: utilizza lo storage locale per condividere dati tra di loro Un background task deve essere un progetto separato dall’applicazione ed essere di tipo Windows Runtime Component I background task non sono in grado di interagire con la UI. Utilizzate notifiche toast, tile o badge per questi scenari. Best practice per i background task
Comunicazione App to App
Launcher.LaunchUriAsync( new Uri("sampleapp:?ID=aea6")); Launcher.LaunchFileAsync(file); Attivazione tramite Uri o file App to App oggi L’utente / OS sceglie il destinatario
Share Contract App to App oggi DataTransferManager.ShowShareUI(); L’utente sceglie il destinatario
App to App in Windows Esecuzione di un’app specifica2. Invio dati e file3. Ricevi risultati 4. App Service
Attivazione tramite URI Attivare un’applicazione specifica var options = new LauncherOptions(); options.TargetApplicationPackageFamilyName = "24919.InstapaperIt"; var launchUri = new Uri("instapaper:?AddUrl=http%3A%2F%2Fbing.com"); options await Launcher.LaunchUriAsync(launchUri, options);
Attivazione tramite URI Inviare dati e file var options = new LauncherOptions(); options.TargetApplicationPackageFamilyName = "24919.InstapaperIt"; ValueSet inputData ValueSet inputData = new ValueSet(); IBuffer logo = GetSiteLogo(" inputData.Add("Logo", logo); string thumbnailToken = SharedStorageAccessManager.AddFile (file); var launchUri = new Uri("instapaper:Token=" + thumbnailToken); inputData await Launcher.LaunchUriAsync(launchUri, options, inputData);
var queryUri = new Uri("instapaper:"); await Launcher.QueryUriSupport(queryUri, LaunchUriType.LaunchUri); await Launcher.QueryUriSupport(queryUri, LaunchUriType.LaunchUri, "24919.instapaper"); Verifica presenza dell’app Permette di scoprire se sono installate app in grado di gestire un determinato uri ?
Invio dati Invio file Ricevere dati in ritorno Ricevere file in ritorno Ricevere risultati da un’altra app Ricevi risultati
Ricevere risultati var options = new LauncherOptions(); options.TargetApplicationPackageFamilyName = "24919.InstapaperIt"; var launchUri = new Uri("instapaper:?AddUrl=http%3A%2F%2Fbing.com"); Launcher.LaunchUriForResultsAsync LaunchUriResult result = await Launcher.LaunchUriForResultsAsync(launchUri, options); var resultData = new ValueSet(); resultData.Add("ID", id); operation.ProtocolForResultsOperation.ReportCompleted operation.ProtocolForResultsOperation.ReportCompleted(resultData);
App to app DEMO
App Service
App Service = ‘Web service per le app’ App A App B Background Task Applicazione con App Service
Scenario: scansione di codici a barre Decodifica codici a barre App Service Byte dell’immagine tramite ValueSet or FileToken Dati decodificati
App A App con AppService Chiamare un App Service App Service Background Task var conn = new AppServiceConnection(); conn.AppServiceName = “FooAppService”; conn.PackageFamilyName = “12Me.MyApp“; var status = await conn.OpenAsync();
App A App con AppService Ricevere risultati da un App Service App Service Background Task var conn = new AppServiceConnection(); conn.AppServiceName = “FooAppService”; conn.PackageFamilyName = “12Me.MyApp“; var status = await conn.OpenAsync(); var message = new ValueSet(); message.Add(“Hi”, “There”); var r = await conn.SendMessageAsync(message); conn.Dispose();
App Service DEMO App to App communication
Scenari supportati dai background task
Le applicazioni hanno la possibilità di completare delle attività in Cortana senza dovere necessariamente essere aperte Attività in Cortana Here are your upcoming trips. May 14 th 2015 Las Vegas May 28 th 2015 San Diego Go to Adventure Works August 24 th 2015 Phoenix Content Area App GUI Text App Icon Link to your app App Screen Text-To-Speech (TTS) Content Tile A Here are your upcoming trips.
I task in background per la gestione di comandi vocali Call Text Remind Voice Command VCD App Web Service Microsoft Speech Platform Service (cloud) A Go to Adventure Works Here is your trip to London Applicazione Which ‘Vegas’ trip do you wanna cancel? Here’s your trip to London
Le notifiche toast possono includere elementi interattivi, come bottoni e caselle di testo Quando l’utente interagisce con una toast, viene invocato un task in background Notifiche toast interattive
Debugging di servizi e task
Q & A Domande e Risposte – #wpc15it50 Mail: Codice sessione: WI008 Demo: Samples
Contatti OverNet Education OverNet Education Tel – #wpc15it51