序 添加后台任务是开发app,必需的功能。比如动态磁贴就需要后台任务的支持。但是怎么添加后台任务?添加后台任务后为什么不触发?还是有小伙伴遇到这样的问题。所以写下了这篇文章,记录如何快速简单的添加后台任务。
一、新建解决方案 1、新建windows通用项目,命名为“BackgroundTaskDemo”
2、在解决方案资源管理器,右键解决方案,选择”添加“-”新建项目“,新建windows运行时组件。命名为”BackgroundTasks“,应用内所有的后台任务都写在这里面。
3、删掉默认的class1.cs,新建一个类,命名为“ToastBackgroundTask”
二、配置后台任务 1、在”BackgroundTaskDemo”中,打开“Package.appxmanifest”,按下图设置。
三、写后台事件的类 1、由于很多方法在windows运行组件里是不能写的,所以这里单独新建一个类库项目。
2、新建一个类,命名为”ToastBackgroundTaskHelper“,这里是做了一个Toast通知。代码如下:(需要安装Nuget:”Microsoft.Toolkit.Uwp.Notifications“)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 using Microsoft.Toolkit.Uwp.Notifications;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Windows.UI.Notifications;namespace BackgroundTaskShare { public class ToastBackgroundTaskHelper { public static void PopToast () { ToastContent content = GenerateToastContent(); ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(content.GetXml())); } public static ToastContent GenerateToastContent () { return new ToastContent() { Launch = "action=viewEvent&eventId=1983" , Scenario = ToastScenario.Reminder, Visual = new ToastVisual() { BindingGeneric = new ToastBindingGeneric() { Children = { new AdaptiveText() { Text = "Adaptive Tiles Meeting" }, new AdaptiveText() { Text = "Conf Room 2001 / Building 135" }, new AdaptiveText() { Text = "10:00 AM - 10:30 AM" } } } }, Actions = new ToastActionsCustom() { Inputs = { new ToastSelectionBox("snoozeTime" ) { DefaultSelectionBoxItemId = "15" , Items = { new ToastSelectionBoxItem("1" , "1 minute" ), new ToastSelectionBoxItem("15" , "15 minutes" ), new ToastSelectionBoxItem("60" , "1 hour" ), new ToastSelectionBoxItem("240" , "4 hours" ), new ToastSelectionBoxItem("1440" , "1 day" ) } } }, Buttons = { new ToastButtonSnooze() { SelectionBoxId = "snoozeTime" }, new ToastButtonDismiss() } } }; } } }
四、处理 ToastBackgroundTask 1、要调用 ToastBackgroundTaskHelper 里面的方法,首先需要在BackgroundTasks中添加对BackgroundTaskShare的引用。
2、处理ToastBackgroundTask.cs,代码如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 using Microsoft.Toolkit.Uwp.Notifications;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Windows.ApplicationModel.Background;namespace BackgroundTasks { public sealed class ToastBackgroundTask :IBackgroundTask { public void Run (IBackgroundTaskInstance taskInstance ) { var defferral = taskInstance.GetDeferral(); BackgroundTaskShare.ToastBackgroundTaskHelper.PopToast(); defferral.Complete(); } } }
五、注册和取消后台任务 1、首先在BackgroundTaskDemo中添加对“BackgroundTasks”的引用。
2、在 BackgroundTaskDemo中安装Nuget:“Microsoft.Toolkit.Uwp”,使用如下方法进行注册和取消后台任务。
1 2 3 4 5 BackgroundTaskRegistration registered = BackgroundTaskHelper.Register(typeof (BackgroundTasks.ToastBackgroundTask),new TimeTrigger(15 , false ), false , true , new SystemCondition(SystemConditionType.InternetAvailable)); BackgroundTaskHelper.Unregister(typeof (BackgroundTasks.ToastBackgroundTask));
上面设置为在有网络的情况下每15分钟触发一次后台任务。
六、调试后台任务 1、运行Demo后注册后台任务,稍等一会儿,点开VS的生命周期事件,就可以看到ToastBackgroundTask。需要调试的话就可以在 ToastBackgroundTask 中设置断点。
2、点击后就会立刻运行后台任务,结果如下。说明代码是没有问题的。
这样子就大功告成了。需要的可以下载Demo。
七、Demo下载 BackgroundTaskDemo Download