Windows 8.1 应用商店后台应用的 3-D 原则






4.86/5 (4投票s)
从零开始编写 Windows 应用商店后台应用
引言
在本文中,我将讨论如何在 Windows 8.1 中规划您的后台应用(设计),然后使用 Visual Studio 2013 创建一个后台应用(开发),最后进行故障排除(调试)。
本文基于 C#,并附有完整的可运行示例代码。
设计
1. 不要在后台进行繁重的操作
后台应用有 CPU 和网络配额,以保持设备平稳运行并避免网络超额。
CPU
网络
更多信息 - http://msdn.microsoft.com/en-us/library/windows/apps/hh977056.aspx
2. 处理取消和恢复
如果您的任务超出配额,可能会被操作系统取消,因此您必须设计您的应用程序来处理取消操作。
更多信息 - http://msdn.microsoft.com/en-us/library/windows/apps/hh977052.aspx
3. 是否支持 锁屏界面
如果您的应用程序需要显示一些实时数据,那么它很可能是一个支持锁屏界面的应用程序。 对于支持锁屏界面的应用,您可以使用以下触发器来启动您的任务。
如果应用程序不需要在锁屏界面上运行,那么可以使用以下另一组触发器
后台任务的触发由操作系统处理,因此无需规划您自己的计时器代码。
如果您的任务依赖于机器状态,您可以将以下条件添加到您的触发器,以便任务等待直到满足条件。
开发
1. 使用 Visual Studio 2013 创建 Windows 应用商店应用程序
我假设观众有能力创建一个简单的 Windows 应用商店应用程序。 如果您是 Windows 应用商店应用程序的新手,请参考以下文档。
http://msdn.microsoft.com/en-us/library/windows/apps/br211384.aspx
2. 将一个新项目添加到您在步骤 1 中创建的应用商店应用程序
2.1 为后台任务创建一个新项目并将其添加到您的解决方案。 为此,右键单击您的解决方案并选择“添加->新建项目”。 然后选择 Windows 运行时组件项目类型,命名项目,然后单击“确定”。
2.2 创建一个实现 IBackgroundTask 接口的新类。 Run 方法是必需的入口点,当指定的事件触发时将被调用;此方法在每个后台任务中都是必需的。
public sealed class CPBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
try
{
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
System.Diagnostics.Debug.WriteLine("Starting backgroundtask");
System.Diagnostics.Debug.WriteLine("Stop backgroundtask");
_deferral.Complete();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("exception backgroundtask");
}
}
}
上面的示例代码获取延迟,保存它,并在异步代码完成时释放它。
在我附加的示例代码中,当后台任务运行时会显示 Toast 消息通知。
3. 在 MainPage.xaml.cs 中添加一个按钮来注册后台任务
private async void Button_Click_Register(object sender, RoutedEventArgs e)
{
try
{
//use this if you want to place your app in the lock screen and need to modify the manifest
//BackgroundAccessStatus baStatus = await BackgroundExecutionManager.RequestAccessAsync();
var builder = new BackgroundTaskBuilder();
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "CPBackgroundTasks.CPBackgroundTask";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));
BackgroundTaskRegistration task = builder.Register();
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
3.1 如果您想将您的应用放置在锁屏界面中,请启用以下代码。 但附加的示例不是一个支持锁屏界面的应用程序
BackgroundAccessStatus baStatus = await BackgroundExecutionManager.RequestAccessAsync();
3.1.1 还要在 Package.appxmanifest 中设置清单选项
3.2 设置后台任务入口点
3.2.1 下面的行设置此后台任务的入口点。
builder.TaskEntryPoint = "CPBackgroundTasks.CPBackgroundTask";
3.2.2 如下更新 Package.appxmanifest 文件。
<Extension Category="windows.backgroundTasks" EntryPoint="CPBackgroundTasks.CPBackgroundTask">
<BackgroundTasks>
<Task Type="systemEvent" />
</BackgroundTasks>
</Extension>
3.3 下面的行设置当系统中的 TimeZone 更改时触发一个触发器,然后添加一个附加条件,以确保用户在执行时存在。
builder.SetTrigger(new SystemTrigger(SystemTriggerType.TimeZoneChange, false));
builder.AddCondition(new SystemCondition(SystemConditionType.UserPresent));
3.4 最后一步是使用以下命令注册后台任务
BackgroundTaskRegistration task = builder.Register();
Debug
由于后台任务基于系统事件和/或计时器,我们需要一种方法来触发后台任务以进行调试。 Visual Studio 2013 具有一个很棒的功能,可以随时执行后台任务。
1. 在 CPBackgroundTasks.cs 的 Run 方法中设置一个断点。
2. 使用 Visual Studio 中的 F5 运行应用程序,然后单击应用程序中的“注册后台任务”按钮。
3. 然后转到 Visual Studio 窗口,如下所示以激活后台任务。
这将带您到 Run 方法中的断点,现在您可以调试您的代码了。
更多信息:http://msdn.microsoft.com/en-us/library/windows/apps/jj542416.aspx
结论
正如您在上面看到的,创建一个 Windows 8.1 后台进程就像小菜一碟,但应该谨慎使用,因为它可能会降低操作系统性能。