Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Obtenga información sobre cómo usar el applicationTrigger de
Para obtener un ejemplo de cómo crear un desencadenador de aplicación, consulte este ejemplo de .
En este tema se supone que tiene una tarea en segundo plano que desea activar desde la aplicación. Si aún no tiene una tarea en segundo plano, hay una tarea en segundo plano de ejemplo en BackgroundActivity.cs. O bien, siga los pasos descritos en Crear y registrar una tarea en segundo plano fuera de proceso para crear una.
¿Por qué usar un desencadenador de aplicación?
Utilice un ApplicationTrigger para ejecutar código en un proceso independiente de la aplicación en primer plano. Una ApplicationTrigger es adecuada si la aplicación tiene trabajo que debe realizarse en segundo plano, incluso si el usuario cierra la aplicación en primer plano. Si el trabajo en segundo plano debe detenerse cuando se cierra la aplicación o debe estar vinculado al estado del proceso en primer plano, se debe usar ejecución extendida, en su lugar.
Creación de un desencadenador de aplicación
Cree un nuevo ApplicationTrigger. Puede almacenarlo en un campo como se hace en el fragmento de código siguiente. Esto es por comodidad para que no tengamos que crear una nueva instancia más adelante cuando queremos señalar el desencadenador. Pero puede usar cualquier instancia ApplicationTrigger para indicar el desencadenador.
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
_AppTrigger = new ApplicationTrigger();
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
Windows::ApplicationModel::Background::ApplicationTrigger _AppTrigger;
// _AppTrigger is an ApplicationTrigger field defined at a scope that will keep it alive
// as long as you need to trigger the background task.
// Or, you could create a new ApplicationTrigger instance and use that when you want to
// trigger the background task.
ApplicationTrigger ^ _AppTrigger = ref new ApplicationTrigger();
(Opcional) Agregar una condición
Puede crear una condición de tarea en segundo plano para controlar cuándo se ejecuta la tarea. Una condición impide que la tarea en segundo plano se ejecute hasta que se cumpla la condición. Para obtener más información, consulte Establecer condiciones para ejecutar una tarea en segundo plano.
En este ejemplo, la condición se establece en InternetAvailable para que, una vez desencadenada, la tarea solo se ejecute una vez que esté disponible el acceso a Internet. Para obtener una lista de las posibles condiciones, consulte SystemConditionType.
SystemCondition internetCondition = new SystemCondition(SystemConditionType.InternetAvailable);
Windows::ApplicationModel::Background::SystemCondition internetCondition{
Windows::ApplicationModel::Background::SystemConditionType::InternetAvailable };
SystemCondition ^ internetCondition = ref new SystemCondition(SystemConditionType::InternetAvailable)
Para obtener información más detallada sobre las condiciones y los tipos de desencadenadores en segundo plano, consulte Compatibilidad de la aplicación con tareas en segundo plano.
Llamar a la función RequestAccessAsync()
Antes de registrar la tarea en segundo plano de ApplicationTrigger, llame a RequestAccessAsync para determinar el nivel de actividad en segundo plano que permite el usuario porque es posible que el usuario haya deshabilitado la actividad en segundo plano de la aplicación. Consulte Optimizar la actividad en segundo plano para obtener más información sobre las formas en que los usuarios pueden controlar la configuración de la actividad en segundo plano.
var requestStatus = await Windows.ApplicationModel.Background.BackgroundExecutionManager.RequestAccessAsync();
if (requestStatus != BackgroundAccessStatus.AlwaysAllowed)
{
// Depending on the value of requestStatus, provide an appropriate response
// such as notifying the user which functionality won't work as expected
}
Registrar tarea en segundo plano
Registre la tarea en segundo plano llamando a la función de registro de tareas en segundo plano. Para obtener más información sobre cómo registrar tareas en segundo plano y ver la definición del método RegisterBackgroundTask() en el código de ejemplo siguiente, vea Registrar una tarea en segundo plano.
Si está pensando en usar un desencadenador de aplicación para ampliar la duración del proceso en primer plano, considere la posibilidad de usar ejecución extendida en su lugar. El desencadenador de aplicación está diseñado para crear un proceso hospedado por separado en el que realizar el trabajo. El siguiente fragmento de código registra un desencadenador en segundo plano fuera del proceso.
string entryPoint = "Tasks.ExampleBackgroundTaskClass";
string taskName = "Example application trigger";
BackgroundTaskRegistration task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
std::wstring entryPoint{ L"Tasks.ExampleBackgroundTaskClass" };
std::wstring taskName{ L"Example application trigger" };
Windows::ApplicationModel::Background::BackgroundTaskRegistration task{
RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition) };
String ^ entryPoint = "Tasks.ExampleBackgroundTaskClass";
String ^ taskName = "Example application trigger";
BackgroundTaskRegistration ^ task = RegisterBackgroundTask(entryPoint, taskName, appTrigger, internetCondition);
Los parámetros de registro de tareas en segundo plano se validan en el momento del registro. Se devuelve un error si alguno de los parámetros de registro no es válido. Asegúrese de que su aplicación maneja adecuadamente los escenarios en los que falla el registro de tareas en segundo plano. Si, en cambio, su aplicación depende de tener un objeto de registro válido después de intentar registrar una tarea, podría bloquearse.
Desencadenar la tarea en segundo plano
Antes de desencadenar la tarea en segundo plano, use BackgroundTaskRegistration para comprobar que la tarea en segundo plano está registrada. Un buen momento para comprobar que todas las tareas en segundo plano están registradas durante el inicio de la aplicación.
Desencadene la tarea en segundo plano llamando a ApplicationTrigger.RequestAsync. Cualquier instancia de ApplicationTrigger lo hará.
Tenga en cuenta que applicationTrigger.RequestAsync no se puede llamar desde la propia tarea en segundo plano o cuando la aplicación está en estado de ejecución en segundo plano (consulte Ciclo de vida de la aplicación para obtener más información sobre los estados de la aplicación). Puede devolver DisabledByPolicy si el usuario ha establecido directivas de energía o privacidad que impiden que la aplicación realice actividades en segundo plano. Además, solo se puede ejecutar una instancia de AppTrigger a la vez. Si intenta ejecutar un AppTrigger mientras ya se está ejecutando otro, la función devolverá Actualmente en ejecución.
var result = await _AppTrigger.RequestAsync();
Gestionar recursos para la tarea en segundo plano
Usa backgroundExecutionManager.RequestAccessAsync para determinar si el usuario ha decidido que la actividad en segundo plano de la aplicación debe estar limitada. Tenga en cuenta el uso de la batería y ejecute solo en segundo plano cuando sea necesario completar una acción que el usuario desee. Consulte Optimizar la actividad en segundo plano para obtener más información sobre las formas en que los usuarios pueden controlar la configuración de la actividad en segundo plano.
- Memoria: optimizar la memoria y el uso de energía de la aplicación es clave para asegurarse de que el sistema operativo permitirá que se ejecute la tarea en segundo plano. Use las API de administración de memoria de para ver la cantidad de memoria que usa la tarea en segundo plano. Cuanto más memoria usa la tarea en segundo plano, más difícil es que el sistema operativo lo mantenga en ejecución cuando otra aplicación está en primer plano. En última instancia, el usuario tiene el control de toda la actividad en segundo plano que la aplicación puede realizar y tiene visibilidad sobre el impacto que tiene la aplicación en el uso de la batería.
- Tiempo de CPU: las tareas en segundo plano están limitadas por la cantidad de tiempo de uso del reloj que obtienen en función del tipo de desencadenador. Las tareas en segundo plano desencadenadas por el desencadenador de aplicación se limitan a unos 10 minutos.
Consulte Compatibilidad con la aplicación con tareas en segundo plano para ver las restricciones de recursos aplicadas a las tareas en segundo plano.
Observaciones
A partir de Windows 10, ya no es necesario que el usuario agregue la aplicación a la pantalla de bloqueo para poder usar tareas en segundo plano.
Una tarea en segundo plano solo se ejecutará usando un ApplicationTrigger si primero ha llamado a RequestAccessAsync.
Temas relacionados
- Directrices para tareas en segundo plano
- Ejemplo de código de tarea en segundo plano
- Crear y registrar una tarea en segundo plano en ejecución.
- Crear y registrar una tarea en segundo plano fuera de proceso
- Depurar una tarea en segundo plano
- Declarar tareas en segundo plano en el manifiesto de aplicación
- Memoria libre cuando la aplicación se mueve al fondo
- Controlar una tarea en segundo plano cancelada
- Cómo desencadenar eventos de suspensión, reanudación y en segundo plano en aplicaciones UWP durante la depuración
- Supervisar el progreso y la finalización de la tarea en segundo plano
- Posponer la suspensión de la aplicación mediante ejecución extendida
- Registrar una tarea de segundo plano
- Responder a los eventos del sistema con tareas en segundo plano
- Establecer condiciones para ejecutar una tarea en segundo plano
- Actualizar un icono activo desde una tarea en segundo plano
- Utilice un desencadenante de mantenimiento