Windows Phone 8.1 后台任务

Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务。

(1)新建前台应用

后台任务是依托于前台应用的,所以必须拥有一个前台应用。

该前台应用的功能很简单,就是读取文件中保存的文本;而后台任务就是将当前时间写入文件中。

前台界面:


<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>

<Viewbox Margin="20,0">
<TextBlock x:Name="timeTextBlock"
Text="Time"/>
</Viewbox>

<Grid Grid.Row="1" Margin="20,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Button x:Name="registerButton"
Content="Register Task"
Margin="0,0,5,0"
HorizontalAlignment="Stretch"
Click="registerButton_Click"/>
<Button x:Name="unregisterButton" Grid.Column="1"
Content="Unregister Task"
Margin="5,0,0,0"
HorizontalAlignment="Stretch"
Click="unregisterButton_Click"/>
</Grid>
</Grid>

打开应用时就读取文本信息:


protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await ShowFileText();
}

private async Task ShowFileText()
{
file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Time.txt", CreationCollisionOption.OpenIfExists);
timeTextBlock.Text = await FileIO.ReadTextAsync(file);
}

(2)添加一个 Windows Runtime Component 项目

后台任务必须为 Windows Runtime Component。

(3)编写一个继承自 IBackgroundTask 接口的类

在后台任务的项目中新建一个类,并继承 IBackgroundTask 接口,实现 Run
方法,该类还必须为 sealed:


public sealed class WritingTask: IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();

await WriteTimeToFile("Time.txt");

deferral.Complete();
}

  private async Task WriteTimeToFile(string path)
  {
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, DateTimeOffset.Now.ToString());
}
}

Run 方法就是后台任务执行时的方法。

(4)前台应用 Manifest 中添加后台任务

可以设置触发器的类型,记得设置后台任务的入口点。

然后前台应用添加后台任务项目的引用。

(5)前台应用对后台任务进行注册与解除注册

最后的一步也就是在前台应用中对后台任务进行注册了:


private async void registerButton_Click(object sender, RoutedEventArgs e)
{
BackgroundExecutionManager.RemoveAccess();
await BackgroundExecutionManager.RequestAccessAsync();

RegisterTask();
}

private static void RegisterTask()
{
SystemTrigger triger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);

BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = "WritingTask";
taskBuilder.SetTrigger(triger);
taskBuilder.TaskEntryPoint = typeof(ZMyBackgroundTasks.WritingTask).FullName;
taskBuilder.Register();
}

这里选择的触发器为“当时区改变时”,这只是为了方便测试,你可以根据需要自行选择。

解除注册的方法为:

private void unregisterButton_Click(object sender, RoutedEventArgs e)
{
var task = BackgroundTaskRegistration.AllTasks.Values.First();
task.Unregister(true);
BackgroundExecutionManager.RemoveAccess();
}

时间: 2024-10-10 21:26:25

Windows Phone 8.1 后台任务的相关文章

windows phone 8.1 开发:后台任务详解

原文出自:http://www.bcmeng.com/backtask/ 小梦今天给大家分享一下windows phone 8.1中的后台任务如何实现,许多应用都会用到后台任务,所以我们必须得掌握. 新建后台任务类: 首先我们先新建一个windows phone 8.1空白应用程序.然后请右键单击你的解决方案并依此选择“添加”->“新建项目”.选择 Windows 运行时组件项目类型,为该项目命名为Basktask.(名字都随便起了,只是为了后面方便) 在项目中,右键单击“引用”并选择“添加新引

WP8.1开发:后台任务详解(求推荐)

小梦今天给大家分享一下windows phone 8.1中的后台任务如何实现,许多应用都会用到后台任务,所以我们必须得掌握. 新建后台任务类: 首先我们先新建一个windows phone 8.1空白应用程序.然后请右键单击你的解决方案并依此选择“添加”->“新建项目”.选择 Windows 运行时组件项目类型,为该项目命名为Basktask.(名字都随便起了,只是为了后面方便) 在项目中,右键单击“引用”并选择“添加新引用”.在“解决方案”下,选择“项目”,然后选择Basktask. 将Bas

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之后台任务的新特性 下载和上传的新特性 程序启动前预下载网络资源 后台任务的其它新特性 示例1.本例用于说明 win8.1 中后台下载和上传的新特性(本例用后台下载说明,后台上传与此类似)TransferNew.xaml <Page x:Class="Windows81.BackgroundTask.TransferNew" xmlns="http://schemas.mic

背水一战 Windows 10 (119) - 后台任务: 后台下载任务(任务分组,组完成后触发后台任务)

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下载任务(任务分组,组完成后触发后台任务) 示例演示后台下载任务的分组,以及组任务全部完成后如何触发后台任务/BackgroundTaskLib/BackgroundTaskTransfer.cs /* * 后台任务,用于演示指定的一组后台下载任务全部完成后如何触发此后台任务 * * BackgroundTransferCompletionGroup - 分组对象(用于实现“组任务全部完成后触发后台任务”)

背水一战 Windows 10 (120) - 后台任务: 后台上传任务

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台上传任务 示例演示 uwp 的后台上传任务BackgroundTask/TransferModel.cs /* * 扩展了 DownloadOperation 和 UploadOperation,用于 MVVM 绑定数据 */ using System; using System.ComponentModel; using Windows.Networking.BackgroundTransfer; nam

背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台下载任务(任务分组,并行或串行执行,组完成后通知) 示例演示后台下载任务的分组,以及如何设置组内任务是并行执行还是串行执行,以及组任务全部完成后如何 toast 或 tile 通知)BackgroundTask/TransferModel.cs /* * 扩展了 DownloadOperation 和 UploadOperation,用于 MVVM 绑定数据 */ using System; using S

背水一战 Windows 10 (121) - 后台任务: 推送通知

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 推送通知 示例演示如何接收推送通知/WebApi/PushNotificationController.cs /* * 演示如何向 app 推送通知 * 由于本例没有上商店,所以本例是无法演示的,需要看演示效果的话运行一下自己写的“打字通”的 /TypingGame/PushNotification/Sample.xaml,然后用其生成的 channel 地址在 /WebApi/Controllers/Push

用C语言编写Windows服务程序的五个步骤

Windows 服务被设计用于需要在后台运行的应用程序以及实现没有用户交互的任务.为了学习这种控制台应用程序的基础知识,C(不是C++)是最佳选择.本文将建立并实现一个简单的服务程序,其功能是查询系统中可用物理内存数量,然后将结果写入一个文本文件.最后,你可以用所学知识编写自己的Windows 服务. 当初他写第一个NT 服务时,他到 MSDN 上找例子.在那里他找到了一篇 Nigel Thompson 写的文章:“Creating a Simple Win32 Service in C++”,