使用 Windows 8.1 Preview 中新的计划程序 API,你可以设置任务的优先级并管理作业。这样有助于你以更高效方式编写使用系统资源的应用并为用户提供响应更快的体验。
编写响应性极高的应用很有挑战性。 你可以组合使用多种复杂的 UI 元素,包括 ListView 控件、SemanticZoom 控件和自定义控件,这些元素均会竞争系统资源。 很多元素既需要—动画—等即时的前台工作,也需要其他后台工作。
对于 Windows 8 和 Windows Library for JavaScript 1.0,并没有单一的集成式计划程序。有时低优先级的后台任务可能会先于前台工作占用到资源,致使应用的行为出现响应不良或迟钝。 由于工作是在不同的队列中计划的,因此若要在不同队列之间进行协调来获得所需的优先级,并没有比较容易的方法。
Windows 8.1 Preview 和 Windows Library for JavaScript 2.0 Preview 引入了 Scheduler,这是一个对象/命名空间,它可以将所有工作队列合并成单一的通用队列。该新队列采用基于优先级的计划策略,该策略可支持应用快速、流畅地运行,并帮助实现更统一的开发者体验。 你可以轻松地计划任务,分配优先级,从而达到在适当时间完成适当工作的目的。
Scheduler 可协调 Windows Library for JavaScript 执行的工作,并划分 Windows Runtime 执行的异步工作的优先级。使用计划程序,可让你的应用在系统中使用与所有其他工作相对的正确优先级按计划工作。
计划作业
若要计划工作,你需要使用 schedule 方法创建一个作业。向此方法传递一个函数,用于执行你想要完成的任务。你还可以为作业指定优先级。schedule 方法返回一个实现 IJob 接口的对象,你可以使用此对象对所计划的作业执行暂停、继续和取消操作。
此处是在普通优先级计划两个简单作业的示例。
- // Schedule some work.
- var job1 = S.schedule(function () {
- window.output("Running job1");
- }, S.Priority.normal);
- window.output("Scheduled job1");
- // Schedule more work.
- var job2 = S.schedule(function () {
- window.output("Running job2");
- }, S.Priority.normal);
- window.output("Scheduled job2");
若要了解完整代码,请参阅计划程序示例。
如需额外控制,你的工作函数还可以接受 IJobInfo 对象。你可以使用此对象来确定作业是否应生成控制,计划在当前作业完成后应运行的第二个应用,以及指定在作业生成控制的情况下应运行的函数。
管理作业
前一部分提到了你可以使用 schedule 返回的 IJob 对象来暂停、取消及继续作业。你还可以使用 Scheduler 对象的 createOwnerToken 方法来获取 IOwnerToken,然后使用它来控制其拥有的任何 IJob 对象。
此示例创建了若干 IOwnerToken 对象,然后使用它们来设置若干 IJob 对象的 owner 属性。然后示例使用 IOwnerToken 来同时取消多个作业。
- var ownerObject1 = S.createOwnerToken();
- var ownerObject2 = S.createOwnerToken();
- var ownerObject3 = S.createOwnerToken();
- // Schedule some work.
- var job1 = S.schedule(function () {
- window.output("Running job1 with owner1");
- }, S.Priority.normal);
- job1.owner = ownerObject1;
- window.output("Scheduled job1 with owner1");
- // Schedule some work.
- var job2 = S.schedule(function () {
- window.output("Running job2 with owner2");
- }, S.Priority.normal);
- job2.owner = ownerObject2;
- window.output("Scheduled job2 with owner2");
- // Schedule some work.
- var job3 = S.schedule(function () {
- window.output("Running job3 with owner1");
- }, S.Priority.normal);
- job3.owner = ownerObject1;
- window.output("Scheduled job3 with owner1");
- // Schedule some work.
- var job4 = S.schedule(function () {
- window.output("Running job4 with owner3");
- }, S.Priority.normal);
- job4.owner = ownerObject3;
- window.output("Scheduled job4 with owner3");
- window.output("Canceling jobs with owner1");
- ownerObject1.cancelAll();
原文链接:http://msdn.microsoft.com/zh-cn/library/windows/apps/bg182877.aspx