65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (4投票s)

2014年3月11日

CPOL

3分钟阅读

viewsIcon

11150

downloadIcon

2

从零开始编写 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 后台进程就像小菜一碟,但应该谨慎使用,因为它可能会降低操作系统性能。

© . All rights reserved.