Share via


Come gestire l'attivazione di app (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Informazioni su come definire l'esperienza di attivazione per l'app di Windows Runtime.

A ogni avvio dell'app viene generato l'evento activated. Questo evento può anche essere generato durante l'esecuzione dell'app, se il sistema deve passare parametri correlati al nuovo contratto di attivazione. Puoi usare l'evento activated per ripristinare lo stato precedente dell'app e per recuperare i parametri di attivazione correlati al contratto per cui l'app viene attivata. Per l'elenco completo dei contratti di attivazione e altre informazioni sui relativi parametri, vedi l'enumerazione ActivationKind.

I passaggi seguenti mostrano come registrare l'evento activated, come usarlo per ripristinare lo stato dell'app di base e per gestire un'attivazione predefinita da un riquadro.

Istruzioni

Passaggio 1: Eseguire la registrazione all'evento attivato

Registrati all'evento activated nell'ambito globale. Questo esempio imposta activatedHandler come gestore dell'attivazione. Il gestore dell'attivazione ti consente di recuperare lo stato ApplicationExecution precedente dell'app e gli argomenti di attivazione. Per visualizzare un elenco di tutti i tipi di attivazione, vedi l'enumerazione ActivationKind.


var app = WinJS.Application;

app.addEventListener("activated", activatedHandler, false);
app.start();

Passaggio 2: Ripristinare i dati dell'applicazione quando l'app è stata sospesa e chiusa

Il sistema operativo può terminare la tua app per diversi motivi dopo che è stata sospesa. Ad esempio quando l'utente chiude manualmente l'app o si disconnette dal sistema oppure se le risorse di sistema sono insufficienti. Se l'utente avvia l'app dopo che è stata terminata dal sistema operativo, riceve un evento activated. Usa l'oggetto sessionState per stabilire se devi ripristinare i dati dell'app o avviarla con le impostazioni predefinite. Se le variabili sessionState sono definite, usale per ripristinare i dati dell'app e per aggiornare il contenuto visualizzato. Se non sono definite, carica le impostazioni predefinite.

Puoi anche usare la proprietà PreviousExecutionState sugli argomenti eventi per determinare se l'app deve o meno ripristinare lo stato. Se questa proprietà presenta un valore ApplicationExecutionState di Terminated lo stato deve essere ripristinato. Se presenta qualsiasi altro valore, devi ricaricare le impostazioni predefinite dell'app.

Nota   Se l'app viene attivata mentre è già in esecuzione, presta attenzione a non ripristinare i dati salvati.

 

function activatedHandler(eventArgs) {
   if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
   {
      // Check whether my session state variables are valid.
      // If so, retrieve the application data saved in the checkpoint handler
      if (app.sessionState) 
      {
         // TODO: Populate the UI with the previously saved application data            
      } 
      else
      {
         // TODO: Populate the UI with defaults             
      }

   }
}

Passaggio 3: Se l'app viene avviata su un nuovo computer, cerca riquadri secondari esistenti

// Get secondary tile ids for the application and list them out

Windows.UI.StartScreen.SecondaryTile.findAllAsync().then(function (tiles) {
   if (tiles) {
      tiles.forEach(function (tile) {
         // Inspect the tile and do required work 
      });
   } 
   else {
      // there are no tiles 
      }
   });
}

Passaggio 4: Recuperare gli argomenti di avvio

Quando il sistema attiva l'app, potrebbe esserci ulteriore contesto per l'attivazione.

Ogni tipo di contratto di attivazione include un insieme specifico di parametri che forniscono altre informazioni sul motivo per cui l'app viene attivata. Le classi eventArgs per ogni contratto sono definite nello spazio dei nomi Windows.UI.WebUI. Questo frammento di codice mostra come recuperare argomenti da un avvio di riquadro predefinito.

function activatedHandler(eventArgs) {
    if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
    {
        if (eventArgs.detail.arguments !== '')
        {
            // TODO: Parse the arguments string
        }
    // Initialize the WinJS controls
    eventArgs.setPromise(WinJS.UI.processAll();)

    }
}

Passaggio 5: Impostare l'interfaccia utente dell'app

Quando gestisci l'attivazione per un avvio iniziale, il sistema visualizza la schermata iniziale finché l'app non completa l'attivazione. In alcuni casi l'app deve eseguire operazioni asincrone, ad esempio leggere impostazioni da un file, per inizializzare correttamente la propria interfaccia utente. Queste operazioni devono essere eseguite durante l'attivazione, in modo che la schermata iniziale venga chiusa solo quando l'interfaccia utente è completata. Puoi rinviare il completamento dell'attivazione usando il metodo setPromise() sulla classe eventArgs di attivazione. Nel frammento di codice precedente viene usato setPromise() per rinviare il completamento dell'attivazione fino al completamento della chiamata asincrona a processAll().

Se usi i modelli di Microsoft Visual Studio, la chiamata a setPromise() viene eseguita automaticamente. Se è necessario completare operazioni asincrone prima della chiusura della schermata iniziale, completa queste operazioni durante l'evento "processed" del nuovo frammento di pagina. Assicurati di restituire una promessa da questa attività asincrona per ritardare il completamento dell'evento "processed" fino al completamento dell'attività. L'evento processed viene chiamato ogni volta che l'app si sposta in uno specifico frammento di pagina, per cui verifica che qualsiasi codice specifico per l'attivazione venga eseguito solo in caso di uno spostamento avviato da un'attivazione. Nei normali spostamenti, questo codice dovrebbe essere ignorato.

Nota  La schermata iniziale è destinata solo a brevi attività necessarie per impostare l'interfaccia utente iniziale. Le attività a esecuzione prolungata, come le chiamate alla rete o il caricamento di un file di grandi dimensioni dal disco, non devono essere avviate durante l'attivazione. In questi casi devi impostare per l'app un'interfaccia utente di stato durante l'attivazione o una schermata iniziale estesa e quindi terminare immediatamente l'attivazione, mentre l'esecuzione dell'operazione asincrona continua in background fino al completamento.

 

processed: function (element, options) {
            // During an initial activation this event is called before activation completes.
            // Do any initialization work that is required for the initial UI to be complete.
            // Retrieve settings from a file
            return app.local.readText(settingsFile, "default").then(function (str){
                //use the settings to update the UI
            }, function () {
                //handle the error condition
               });
           },

ready:     function (element, options) {
            // During an initial activation this event is called after activation completes.
            // Do any initialization work that is not related to getting the initial UI set up.
           }

Osservazioni

Quando l'app viene avviata, l'evento attivato viene generato dopo l'evento DOMContentLoaded e prima dell'evento WinJS.Application.onloaded. Durante l'esecuzione dell'app, gli eventi attivati possono essere attivati in qualsiasi momento.

Nota  Se per un qualsiasi motivo l'app deve poter passare al documento di livello superiore, devi completare l'attivazione prima di provare a eseguire la navigazione al livello superiore. Se provi a eseguire questa operazione prima che venga completata l'attivazione, l'app si bloccherà. In questo modo ti assicurerai che l'app e il sistema si trovino in uno stato coerente prima che il contesto JavaScript venga chiuso e ricreato durante la navigazione.

 

Nota  

Per le app di Windows Phone Store l'evento resuming è seguito sempre dall'evento activated, anche quando l'app è momentaneamente sospesa e l'utente avvia nuovamente l'app da un riquadro primario o dall'elenco delle app. Le app possono ignorare l'inizializzazione se nella finestra corrente è già presente del contenuto. Puoi verificare la proprietà LaunchActivatedEventArgs.TileId per stabilire se l'app è stata avviata da un riquadro primario o secondario e, in base a questa informazione, decidere se è preferibile riprendere l'esperienza dell'app o presentarne una nuova.

Esempio completo

Vedi l'esempio di attivazione e sospensione di un'app con WinJS e l'esempio di attivazione, ripresa e sospensione di un'app con WRL per esempi di codice completi relativi alla gestione degli eventi del ciclo di vita dell'app.

Argomenti correlati

Attività

Come sospendere l'esecuzione di un'app

Come riprendere l'esecuzione di un'app

Informazioni concettuali

Ciclo di vita dell'app

Riferimento

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated