windows phone中后台代理分两种,分别为PeriodicTask、ResourceIntensiveTask 。
限制:
1.定期代理和资源密集型代码任何时候都不能使用超过 11 MB 的内存。音频代理限制为 15 MB
2.每隔两周需要重新计划
3.两次连续崩溃之后取消代理计划
定期代理(PeriodicTask):
1.计划间隔:30 分钟,若要优化电池使用时间,定期代理的运行可以与其他后台进程一致,因此执行时间可能最多漂移 10 分钟。
2.计划持续时间:25 秒,其他限制可能会导致代理提取终止。
3.节电模式可能会阻止执行
4.每个设备的定期代理限制,每个设备配置而异并且可以低到 6
资源密集形代理(ResourceIntensiveTask ):
1.资源密集型代理通常运行 10 分钟
2.需要外部电源
3.通过 Wi-Fi 或 PC 连接建立网络连接
4.电池电量高于 90%
5.设备屏幕锁定
6.非活动手机呼叫
7.不能将网络更改为手机网络
注:如果设备达到了一种状态,即,符合所有需要的条件并且启动了资源密集型代理,那么当设备状态发生更改以至于不符合任何条件时,则会立即终止资源密集型代理。
使用方法:
1、从“文件”菜单中,选择“添加->新项目...”。在“添加新项目”对话框中,选择“Windows Phone 计划任务代理”,保留默认名称 ScheduledTaskAgent1,然后单击“确定”。
2、在“解决方案资源管理器”中,单击您的前台应用项目以将其选中。接下来,从“项目”菜单中,选择“添加引用...”。在“添加引用”对话框中,选择“属性”标签。选择代理项目 ScheduledTaskAgent1,然后单击“确定”。
3、在 OnInvoke(ScheduledTask) 类中实现的方法。调用成功后应调用NotifyComplete() ,失败应调用Abort() 。
4、以xml方式打开WMAppManifest.xml文件,在Task标签下添加ExtendedTask注册后台带代理:
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml"/>
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent
Specifier="ScheduledTaskAgent"
Name="ScheduledTaskAgent1"
Source="ScheduledTaskAgent1"
Type="ScheduledTaskAgent1.ScheduledAgent" />
</ExtendedTask>
</Tasks>
参数:
Specifier:可选AudioPlayerAgent、AudioStreamingAgent 或 ScheduledTaskAgent,声明注册的类型。
Name:程序集名称。
Source:程序集源文件。
Type:程序集入口点的完整类名。
5、接下来,使用ScheduledActionService.Find(name)方法获得指定名称的后台代理。如果对象不为null,则应调用Remove(name)向系统注销此代理。再重新创建一个新的代理,然后调用ScheduledActionService.Add(periodicTask)添加后台代理(注意:如果用户禁用后台代理,则调用Add方法时会引发 InvalidOperationException异常,所以应该将Add方法放在Try块中)
使用ScheduledActionService.LaunchForTest(periodicTaskName, TimeSpan.FromSeconds(60));以在调用该方法一分钟后启动代理。