UWP Background Task Debug

内容基本来源 “深入浅出 Windows 10通用应用开发”(作者林政),算是一份学习笔记吧。

后台任务(BackgroundTask

相对于一个终端用户可以直接交互的应用程序来说,后台任务是windows 10 系统提供在后台运行的进程。后台任务一般与一个应用程序关联,随应用的安装而安装,由关联的应用注册,安装注册后的后台任务需要通过预设的触发器(Trigger)触发来运行,关联的应用卸载时,后台任务也卸载。但是后台任务运行的线程是完全独立,因此在其关联的应用程序的任何生命周期里(Running,Suspended,Terminated)即使系统重启而应用不重启时,后台任务依然可以执行。可以将后台任务视为类似win32中的windowsservice应用模式。

BackgroundTask的作用与限制

它不能与用户直接交互,但是可以对磁贴(Tile),吐司(Toast),和锁屏(Lock Screen)进行更新和操作。后台任务真正的意义是作为应用程序的一个后台的轻量级服务运行,给用户提供一些重要的通知信息或者为应用程序记录一些重要的信息。Windows 10对后台任务的资源限制会根据应用不在锁屏上和应用位于锁屏上两种情况区别对待(应用是否出现在锁屏上,除了应用本身支持,还需要用户手动设置)。

关于后台任务的资源限制具体参考 Background task resource constraintsCPU quotas

实现一个BackgroundTask 应注意的问题

具体步骤见(https://blog.youkuaiyun.com/mochounv/article/details/70163116)。

(1) IBackgroundTask Run 方法:

从例子中可以看到,实现BackgroundTask并不是New 一个BackgroundTask,似乎没有这样的API。

而是实现IBackgroundTask接口,重载实现IBackgroundTask的Run方法,Run方法是在触发指定事件时必须调用的输入点,每个后台任务中都需要该方法。

(2)异步代码:

如果在后台任务中运行任何异步代码,则必须使用BackgroundTaskDeferral。否则当Run方法在异步调用之前完成时,后台任务进程可能会意外终止。并且为Run 方法添加async关键字,如下:

若是在Run中启用了额外的线程,也是一样的道理,需要添加处理程序确保BackgroundTask退出前,所有线程代码都已执行完成。

(3)注册:

后台任务需要在其所属的主项目中注册之后才可以正常运行,注册后台任务就是相当于把后台任务添加到系统服务里,从而系统才能根据注册的信息来调用执行后台任务。

注册通过 BackgroundTaskRegistration对象完成。

注册之前需要检查任务是否已注册,因为如果任务已注册多次,则将在该任务触发时运行多次。这样除了多占用CPU资源,还可能导致意外的行为。

注册时需要提供任务入口(EntryPoint)(命令空间为前缀的后台任务名称,xxnamespace.taskclassname);

作为唯一标识的名称;

以及启动任务的触发器(根据实际需要可以通过AddCondition添加其它限制条件)。

完成代码附在此https://download.youkuaiyun.com/download/mochounv/12142061

(4)使用声明

在应用程序使用任何后台任务都需要对任务先作声明

可参见 https://blog.youkuaiyun.com/mochounv/article/details/70163116 的声明部分。

声明信息主要包括 类别为“windows.backgroundTasks", 任务入口(EntryPoint)及触发器类型。如果没有声明,运行注册代码时会发出以下异常。

System.Exception: 'Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))'

BackgroundTask调试

因为后台任务是需要在一个特定的条件和状态下才会运行的,如果直接运行项目将很难等到后台任务也同时运行。Visual studio调试器提供模拟触发条件的功能。

启动调试,在此状态下,从“Lifestyle Events”中选择需要调试的后台任务,如下所示,则这个时候应用程序会进入后台任务的Run方法里面。

该文章所涉及代码 https://download.youkuaiyun.com/download/mochounv/12142061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值