Condividi tramite


Eseguire attività in background a tempo illimitato

Per offrire un'esperienza ottimale per gli utenti, Windows impone limiti di risorse alle app in piattaforma UWP (Universal Windows Platform). Alle app in primo piano è assegnata la maggior quantità di memoria e tempo di esecuzione; alle app in background meno. Gli utenti sono quindi protetti da scarse prestazioni dell'app in primo piano e scaricamento pesante della batteria.

Tuttavia, gli sviluppatori che scrivono app UWP per uso personale (ovvero app trasferite localmente che non verranno pubblicate in Microsoft Store) o sviluppatori che scrivono app UWP aziendali, possono voler usare tutte le risorse disponibili nel dispositivo senza alcuna limitazione dell'esecuzione in background o estesa. Le applicazioni UWP line-of-business e personali possono usare le API in Windows Creators Update (versione 1703) per disattivare la limitazione. Tenere presente che non si può inserire un'app in Microsoft Store se usa queste API.

Esecuzione mentre è ridotta a icona

Le app UWP passano a uno stato sospeso quando non sono in esecuzione in primo piano. Sul desktop, questo si verifica quando un utente riduce a icona l'app. Le app usano una sessione di esecuzione estesa per continuare l'esecuzione mentre sono ridotte a icona. Le API di esecuzione estesa accettate da Microsoft Store sono descritte in Rimandare la sospensione dell'app con l'esecuzione estesa.

Se si sta sviluppando un'app non destinata a essere inviata in Microsoft Store, si può usare ExtendedExecutionForegroundSession con la funzionalità extendedExecutionUnconstrained con limitazioni in modo che l'app possa continuare a essere eseguita mentre è ridotta a icona, indipendentemente dallo stato energetico del dispositivo.  

La extendedExecutionUnconstrained funzionalità viene aggiunta come funzionalità con limitazioni nel manifesto dell'app. Per maggiori informazioni sulle funzionalità limitate, vedere Dichiarazioni di funzionalità dell'app.

Nota

Aggiungere la dichiarazione dello spazio dei nomi XML xmlns:rescap e usare il prefisso rescap quando si dichiara la funzionalità.

Per maggiori informazioni, vedere la sezione Funzionalità limitate di Dichiarazioni di funzionalità delle app.

Package.appxmanifest

<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
  ...
  <Capabilities>
    <rescap:Capability Name="extendedExecutionUnconstrained"/>
  </Capabilities>
</Package>

Quando si usano le extendedExecutionUnconstrained funzionalità, ExtendedExecutionForegroundSession e ExtendedExecutionForegroundReason sono usati al posto di ExtendedExecutionSession e ExtendedExecutionReason. Si applica ancora lo stesso modello per creazione della sessione, impostazione dei membri e richiesta dell'estensione in modo asincrono:

var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
    case ExtendedExecutionForegroundResult.Allowed:
        DoLongRunningWork();
        break;

    default:
    case ExtendedExecutionForegroundResult.Denied:
        DoShortRunningWork();
        break;
}

È possibile richiedere questa sessione di esecuzione estesa non appena l'app passa in primo piano. Le sessioni di esecuzione estesa non vincolate non sono limitate dalle quote energetiche o dal risparmio batteria del sistema operativo. Se è presente un riferimento all'oggetto sessione, l'app rimane in stato esecuzione e non entra in stato sospeso. Se l'app viene chiusa dall'utente, la sessione viene revocata.

La registrazione per l'evento Revocato consente all'app di eseguire qualsiasi operazione di pulizia necessaria. Nello stato sospensione è possibile creare una sessione di esecuzione estesa con ExtendedExecutionReason.SavingData per salvare i dati utente prima che l'app venga terminata e rimossa dalla memoria.

Eseguire attività in background a tempo indeterminato

Nella piattaforma UWP (Universal Windows Platform) le attività in background sono processi eseguiti in background senza alcuna forma di interfaccia utente. Le attività in background possono in genere essere eseguite per un massimo di venticinque secondi prima che vengano annullate. Alcune delle attività con esecuzione più lunga hanno anche un controllo per assicurarsi che l'attività in background non sia inattiva o che utilizzi memoria. In Windows Creators Update (versione 1703) è stata introdotta la funzionalità con limitazioni extendedBackgroundTaskTime per rimuovere questi limiti. La funzionalità extendedBackgroundTaskTime viene aggiunta come funzionalità con limitazioni nel file manifesto dell'app:

Nota

Aggiungere la dichiarazione dello spazio dei nomi XML xmlns:rescap e usare il prefisso rescap quando si dichiara la funzionalità.

Per maggiori informazioni, vedere la sezione Funzionalità limitate di Dichiarazioni di funzionalità delle app.

Package.appxmanifest

<Package
    ... 
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
...
  <Capabilities>
    <rescap:Capability Name="extendedBackgroundTaskTime"/>
  </Capabilities>
</Package>

Questa funzionalità rimuove le limitazioni del tempo di esecuzione e il watchdog di attività inattiva. Una volta avviata un'attività in background, indipendentemente dal fatto che si tratti di un trigger o di una chiamata al servizio app, una volta impiegato un differimento in BackgroundTaskInstance fornito dal metodo di Esecuzione, può essere eseguita a tempo indeterminato. Se l'app è impostata su Managed By Windows, potrebbe comunque essere applicata ad essa una quota di energia e le relative attività in background non vengono attivate quando il risparmio batteria è attivo. Questo può essere modificato con le impostazioni del sistema operativo. Maggiori informazioni sono disponibili in Ottimizzazione dell'attività in background.

La piattaforma UWP (Universal Windows Platform) monitora l'esecuzione delle attività in background per garantire una buona durata della batteria e un'esperienza di app in primo piano senza problemi. Tuttavia, le app personali e le app line-of-Business aziendali possono usare l'esecuzione estesa e la funzionalità extendedBackgroundTaskTime per creare app che verranno eseguite fino a quando è necessario indipendentemente dalla disponibilità delle risorse del dispositivo.

Tenere presente che le attività extendedExecutionUnconstrained e extendedBackgroundTaskTime possono eseguire l'override dei criteri predefiniti per le app UWP e possono causare un consumo significativo della batteria. Prima di usare queste funzionalità, verificare prima di tutto che i criteri predefiniti per l'esecuzione estesa e il tempo delle attività in background non soddisfino le proprie esigenze ed eseguano test in condizioni vincolate dalla batteria per comprendere l'impatto che l'app avrà su un dispositivo.

Vedi anche

Rimuovere le limitazioni delle risorse per le attività in background