- Windows 10 开发教程
- Windows 10 - 主页
- Windows 10 - 简介
- Windows 10 – UWP
- Windows 10 – 第一个应用程序
- Windows 10 - 商店
- Windows 10 - XAML 控件
- Windows 10 - 数据绑定
- Windows 10 - XAML 性能
- Windows 10 - 自适应设计
- Windows 10 - 自适应 UI
- Windows 10 - 自适应代码
- Windows 10 - 文件管理
- Windows 10 - SQLite 数据库
- Windows 10 – 通讯
- Windows 10 - 应用程序本地化
- Windows 10 - 应用程序生命周期
- Windows 10 - 后台执行
- Windows 10 - 应用程序服务
- Windows 10 - 网络平台
- Windows 10 - 互联体验
- Windows 10 - 导航
- Windows 10 - 网络
- Windows 10 - 云服务
- Windows 10 - 动态磁贴
- Windows 10 - 共享合同
- Windows 10 - 移植到 Windows
- Windows 10 有用资源
- Windows 10 - 快速指南
- Windows 10 - 有用的资源
- Windows 10 - 讨论
Windows10 开发 - 后台执行
通用 Windows 平台 (UWP) 引入了新机制,允许应用程序不在前台运行时执行某些功能。UWP 还增强了应用程序在后台任务和触发器中延长其执行时间的能力。后台执行是应用程序生命周期的真正补充。
后台任务的重要特征是 -
后台任务由系统或时间事件触发,并且可能受到一个或多个条件的约束。
当触发后台任务时,其关联的处理程序将运行并执行后台任务的工作。
即使注册后台任务的应用程序被挂起,后台任务也可以运行。
它们是标准应用程序平台的一部分,本质上为应用程序提供了注册系统事件(触发器)的能力。当该事件发生时,他们会在后台运行预定义的代码块。系统触发器包括网络连接或系统时区更改等事件。
无法保证后台执行,因此它不适合关键功能和特性。
操作系统对可以同时运行的后台任务数量有限制。因此,即使触发触发器并且满足条件,任务仍然无法运行。
创建并注册后台任务
创建一个后台任务类并将其注册为在您的应用程序不在前台时运行。您可以通过编写实现IBackgroundTask接口的类在后台运行代码。以下示例代码显示了后台任务类的非常基本的起点。
public sealed class MyBackgroundTask : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance){ // write code } }
您可以按如下方式请求后台任务的访问权限。
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); task.Register(); await trigger.RequestAsync();
让我们通过遵循以下所有给定步骤来了解后台任务的简单示例。
创建一个新的空白 UWP 项目“UWPBackgroundDemo”,并在 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>
下面给出的是注册后台任务的按钮单击事件实现。
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(); } } }
现在创建另一个项目,但这次从菜单中选择 Windows 运行时组件(通用 Windows),并将该项目命名为“Background stuff” 。
下面给出的是 C# 代码。其中包含MyBackgroundTask类植入,它将运行后台任务。
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); } } }
要使该项目在UWPBackgroundDemo项目中可访问,请右键单击“解决方案资源管理器”中的“引用”>“添加引用”,然后添加“BackgroundStuff ”项目。
现在,让我们转到UWPBackgroundDemo项目的Package.appxmanifest文件,并在声明选项卡中添加以下信息。
首先构建Background stuff 项目,然后构建并执行UWPBackgroundDemo项目。
编译并执行上述代码后,您将看到以下窗口。
当您单击该按钮时,它将运行后台任务并在窗口右端显示通知。