语言: HTML | XAML

快速入门:创建并注册原始通知后台任务 (XAML)

Applies to Windows and Windows Phone

注意  不使用 C#/VB/C++?请参阅快速入门:创建并注册原始通知后台任务 (HTML)

可以为你的 Windows 应用商店应用创建和注册后台任务功能。然后运行该代码,以响应原始通知的接收,这样当应用不在前台时可提供你的应用功能。

为了完成此过程,你必须编辑三个单独的文件:应用代码、应用清单和包含后台任务代码的新文件。

先决条件

若要理解本主题或使用其提供的代码,则你需要:

  • 熟悉推送通知。有关详细信息,请参阅推送通知概述
  • 熟悉原始推送通知。有关详细信息,请参阅原始通知概述
  • 能够将推送通知发送到 Windows 推送通知服务 (WNS) 的云服务。有关详细信息,请参阅快速入门:发送推送通知
  • 后台任务的父应用。此应用必须已被授予出现在锁屏上的权限。有关详细信息,请参阅锁屏概述

说明

1. 创建后台任务类

若要在后台运行代码,你必须创建实现 IBackgroundTask 接口的类,如以下示例中所示。该类会在发送原始通知时运行。

若要开始,请在你的应用的解决方案中创建新项目。此项目将包含你的后台任务代码。将 Windows.ApplicationModel.Background 命名空间导入项目。将代码文件添加到该项目。在此处,我们将添加名为 ExampleBackgroundTask.cs 的 C# 文件。

ExampleBackgroundTask.cs 文件中,创建一个实现 IBackgroundTask 接口的新类。该接口的 Run 方法必须存在于每个后台任务中,作为在触发指定事件时调用的入口点。

以下示例显示后台任务类的非常基本的起始点。特定于你的应用定义的原始通知内容的代码正文将替换“// ...”注释。



using Windows.ApplicationModel.Background;
using Windows.Networking.PushNotifications;

namespace Tasks
{
    public sealed class ExampleBackgroundTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
            string content = notification.Content;

            // ...
        }        
    }
}

如果你在后台任务中运行任何异步代码,则你的后台任务需要使用 deferral。如果不使用延迟,则后台任务进程可能会意外终止(如果 Run 方法在异步方法之前完成)。

调用异步方法之前,在 Run 方法中请求延迟。将延迟保存到某个全局变量以便可以从异步方法访问。完成异步代码之后声明延迟完成。以下代码演示使用名为 ExampleMethodAsync 的异步方法的那些步骤。注释“// ...”将被替换为在后台执行工作的代码。

注意  在 C# 中,可以使用“async”或“await”关键字调用后台任务的异步方法。在 C++ 中,可通过使用任务链获得相似的结果。

有关 Windows 应用商店应用中的异步模式的详细信息,请参阅异步编程。有关如何使用延迟阻止后台任务提前终止的其他示例,请参阅后台任务示例



public async void Run(IBackgroundTaskInstance taskInstance)
{
    BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
    
    RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
    string content = notification.Content;

    // ...

    // Insert code to start one or more asynchronous methods using the "await" keyword.
    var result = await ExampleMethodAsync();
    
    // ...
    
    _deferral.Complete();
}

2. 在应用清单中声明后台任务

注意  作为此步骤的先决条件,你的应用必须选择锁屏选项并提供锁屏提醒徽标,然后才能支持后台任务。有关详细信息,请参阅快速入门:在锁屏上显示磁贴和锁屏提醒更新

在你的应用可以注册后台任务之前,你必须在应用清单中声明后台任务及其触发器。可以直接以 XML 或通过 Microsoft Visual Studio 清单编辑器来执行此操作。

  • 若要使用清单编辑器,请在 Visual Studio 中双击你的应用的 Package.appxmanifest 文件。在“声明”选项卡上,从“可用声明”下拉列表中选择“后台任务”。作为触发器,在“属性”下选择“推送通知”。在“起始页”框中,输入后台任务的文件的名称,在此处为 ExampleBackgroundTask.cs

    如果你的应用使用多个后台任务,请为每个任务重复此步骤,从而将每个时间指向不同的文件。

  • 若要直接向清单的 XML 中添加信息,请在文本编辑器中打开清单。在 Extensions 元素中,为后台任务类添加 Extension 元素。Category 属性应设置为“windows.backgroundTasks”,StartPage 属性应指定后台任务的文件,在此处为 ExampleBackgroundTask.cs

    如果你的应用使用多个后台任务,请为每个任务添加单独的 Extension 元素,从而使每个元素指向不同的文件。

    你必须列出后台任务使用的每个触发器类型。因为我们创建的后台任务是为了响应原始通知而触发的,所以我们将声明推送通知触发器。将 BackgroundTasks 元素添加到 Extension 元素,将其 Task 元素设置为“pushNotification”。

    完整的 Extension 元素如下所示。



<Extension Category="windows.backgroundTasks" StartPage="js\examplebackgroundtask.js">
  <BackgroundTasks>
    <Task Type="pushNotification"/>
  </BackgroundTasks>
</Extension>

3. 在应用中注册后台任务

以下示例提供你将添加到你的应用的代码(例如,在其 MainPage.xaml.cs file 中),以将后台任务注册为对原始通知的响应。

注意  你也可以创建专用于注册后台任务的函数。有关详细信息,请参阅如何注册后台任务。在这种情况下,不使用接下来的这些步骤,你可以简单构造触发器并将其随任务名称、任务入口点以及(可选)条件一起提供给注册函数。

首先,确定后台任务是否已注册。此步骤很重要。如果你的应用不检查现有的后台任务注册,那么它可能会多次注册同一任务。这会导致性能问题以及可能阻止任务完成的 CPU 使用。

下例将迭代 Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks 属性,如果任务已注册,则将标志设置为 true



var taskRegistered = false;
var exampleTaskName = "ExampleBackgroundTask";

var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks.first();

while (iter.hasCurrent) {
    var task = iter.current.value;
    
    if (task.name == exampleTaskName) {
        taskRegistered = true;
        break;
    }

    iter.moveNext();
}

如果你的应用发现后台任务未注册,它会通过调用 Windows.ApplicationModel.Background.BackgroundTaskBuilder.Register 方法来注册。在对该方法的调用中,你需包含该任务的入口点,它是你的后台任务类的名称,即使用命名空间作为前缀。

后台任务触发器控制后台任务何时运行。在本例中,是使用向推送通知通道发送原始通知时触发的 PushNotificationTrigger



if (!taskRegistered) {

var builder = new BackgroundTaskBuilder();

builder.Name = exampleTaskName;
builder.TaskEntryPoint = "Task.ExampleBackgroundTask";
builder.SetTrigger(new Windows.ApplicationModel.Background.PushNotificationTrigger());
BackgroundTaskRegistration task = builder.Register();
}

摘要

现在,你应该已基本了解如何编写用于原始通知的后台任务类,包括如何从应用中注册后台任务。你还应该了解如何更新应用清单,以便 Windows 允许你的应用注册其后台任务。

注意  你可以下载后台任务示例以查看使用多种不同类型后台任务的完整且可靠的 Windows 应用商店应用上下文中的这些代码示例以及更多示例。

相关主题

原始通知示例
原始通知概述
原始通知指南和清单
快速入门:为正在运行的应用截获推送通知
RawNotification

 

 

显示:
© 2015 Microsoft