Desarrollador de Windows10: ejecución en segundo plano
La Plataforma universal de Windows (UWP) presenta nuevos mecanismos que permiten que las aplicaciones realicen algunas funciones mientras la aplicación no se está ejecutando en primer plano. UWP también aumenta la capacidad de las aplicaciones para extender su tiempo de ejecución en segundo plano paraBackground Tasks and Triggers. La ejecución en segundo plano es la verdadera cola complementaria del ciclo de vida de la aplicación.
Las características importantes de las tareas en segundo plano son:
Una tarea en segundo plano se desencadena por un evento del sistema o del tiempo y puede estar limitada por una o más condiciones.
Cuando se activa una tarea en segundo plano, su controlador asociado se ejecuta y realiza el trabajo de la tarea en segundo plano.
Una tarea en segundo plano se puede ejecutar incluso cuando la aplicación que registró la tarea en segundo plano está suspendida.
Son parte de la plataforma de aplicaciones estándar y esencialmente proporcionan una aplicación con la capacidad de registrarse para un evento del sistema (disparador). Cuando ocurre ese evento, ejecutan un bloque de código predefinido en segundo plano. Los activadores del sistema incluyen eventos como cambios en la conectividad de la red o la zona horaria del sistema.
La ejecución en segundo plano no está garantizada, por lo que no es adecuada para funciones y características críticas.
El sistema operativo tiene una limitación en cuanto a la cantidad de tareas en segundo plano que se pueden ejecutar al mismo tiempo. Entonces, incluso cuando se activa el disparador y se cumplen las condiciones, la tarea aún no se puede ejecutar.
Crear y registrar una tarea en segundo plano
Cree una clase de tarea en segundo plano y regístrela para que se ejecute cuando su aplicación no esté en primer plano. Puede ejecutar código en segundo plano escribiendo clases que implementen elIBackgroundTaskinterfaz. El siguiente código de muestra muestra un punto de partida muy básico para una clase de tarea en segundo plano.
public sealed class MyBackgroundTask : IBackgroundTask {
public void Run(IBackgroundTaskInstance taskInstance){
// write code
}
}
Puede solicitar acceso para la tarea en segundo plano de la siguiente manera.
var access = await BackgroundExecutionManager.RequestAccessAsync();
switch (access) {
case BackgroundAccessStatus.Unspecified:
break;
case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
break;
case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity:
break;
case BackgroundAccessStatus.Denied:
break;
default:
break;
}
Para crear y registrar la tarea en segundo plano, use el siguiente código.
var task = new BackgroundTaskBuilder {
Name = "My Task",
TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString()
};
var trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
task.Register();
await trigger.RequestAsync();
Entendamos un ejemplo simple de tarea en segundo plano siguiendo todos los pasos que se dan a continuación.
Crear un nuevo proyecto de UWP en blanco ‘UWPBackgroundDemo’ y agregue un botón en el archivo XAML.
<Page
x:Class = "UWPBackgroundDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPBackgroundDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button x:Name = "button" Content = "Button"
HorizontalAlignment = "Left" Margin = "159,288,0,0"
VerticalAlignment = "Top" Click = "button_Click"/>
</Grid>
</Page>
A continuación se muestra el button click implementación del evento en el que se registra la tarea en segundo plano.
using System;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPBackgroundDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
public MainPage() {
this.InitializeComponent();
}
private async void button_Click(object sender, RoutedEventArgs e) {
var access = await BackgroundExecutionManager.RequestAccessAsync();
switch (access){
case BackgroundAccessStatus.Unspecified:
break;
case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
break;
case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity:
break;
case BackgroundAccessStatus.Denied:
break;
default:
break;
}
var task = new BackgroundTaskBuilder {
Name = "My Task",
TaskEntryPoint = typeof(BackgroundStuff.MyBackgroundTask).ToString()
};
var trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
var condition = new SystemCondition(SystemConditionType.InternetAvailable);
task.Register();
await trigger.RequestAsync();
}
}
}
Ahora cree otro proyecto, pero esta vez seleccione Windows Runtime Component (Universal Windows) en el menú y dé el nombre Background stuff a este proyecto.
A continuación se muestra el código C #. que contieneMyBackgroundTask implantación de la clase y ejecutará la tarea en segundo plano.
using Windows.ApplicationModel.Background;
using Windows.UI.Notifications;
namespace BackgroundStuff {
public sealed class MyBackgroundTask : IBackgroundTask {
public void Run(IBackgroundTaskInstance taskInstance) {
SendToast("Hi this is background Task");
}
public static void SendToast(string message) {
var template = ToastTemplateType.ToastText01;
var xml = ToastNotificationManager.GetTemplateContent(template);
var elements = xml.GetElementsByTagName("Test");
var text = xml.CreateTextNode(message);
elements[0].AppendChild(text);
var toast = new ToastNotification(xml);
ToastNotificationManager.CreateToastNotifier().Show(toast);
}
}
}
Para que este proyecto sea accesible en el UWPBackgroundDemo proyecto, haga clic derecho en References > Add References en el Explorador de soluciones y agregue BackgroundStuff proyecto.
Ahora, vayamos al Package.appxmanifest archivo de UWPBackgroundDemo proyecto y agregue la siguiente información en la pestaña Declaraciones.
Primero compile el proyecto de material de fondo, luego compile y ejecute el UWPBackgroundDemo proyecto.
Cuando se compile y ejecute el código anterior, verá la siguiente ventana.
Cuando haces clic en el button, ejecutará la tarea en segundo plano y mostrará una notificación en el extremo derecho de la ventana.