在Wp7.1中实现了多任务,允许应用程序在后台运行。通过Scheduled Task 和 Back Agent可以使程序在后台运行。
BackgroundAgent
是ScheduledTaskAgent, AudioPlayerAgent, AudioStreamAgent所有具有后台运行功能Agent的基类。
ScheduledTaskAgent
用于实现ScheduledTask,这个类包含一个OnInvoke方法,当ScheduledTask执行后会被调用。
ScheduledTask
包含PeriodicTask和ResourceIntensiveTask两种 Task。
PeriodicTask
可以使程序在后台运行,这个Task只能定期的运行在很少的时间量和很有限的设备资源上。
ResourceIntensiveTask
这个Task可以使用很多的设备资源,并且需要运行较长的时间周期,但是却很少运行。
后台运行不支持的API
内存使用要求
Periodic agents 和Resource-intensive agents 使用内存不能大于 5 MB 。Audio agents可以使用 15 MB内存。如果超过这个范围 Scheduled Task就会被立即终止。
通过Secheduled Task对象的ExpirationTime可以设置这个Task的运行时间,但最大不能超过两个星期。当应用程序在前台运行时,会重设当前时间为开始时间。
示例:
1. 创建工程
在新建工程面板中选择Windows Phone Task Scheduler Agent模板,这时开发工具会创建一个ShceduledTaskAgent工程做为一个项目的后台。
在这个工程中会自动生成一个TaskScheduler.cs文件,这个文件创建了一个继承ScheduledTaskAgent的类TaskScheduler,这个类用来响应ScheduledTask的执行。这个工程将生成一个库文件。
publicclassTaskScheduler : ScheduledTaskAgent
{
protectedoverridevoidOnInvoke(ScheduledTask task)
{
//在这里添加ScheduledTask执行后所要运行的代码
NotifyComplete();
}
protectedoverridevoidOnCancel()
{
base.OnCancel();
//在这里添加ScheduledTask运行结束后所要运行的代码,比如清除一些资源等
}
}
再这个项目中,再增加一个Windows Phone Application工程,做为程序的前台。并且将后台生成的库加入进来。
voidMainPage_Loaded(object sender, RoutedEventArgs e)
{
StartPeriodicTask();
if (IsTaskStart())
textBlock1.Text = GetTaskDescription();
}
privatevoidStartPeriodicTask()
{
_tskPeriodic = newPeriodicTask(PERIODICTASKNAME);
_tskPeriodic.Description = “启动PeriodicTask”;
if (ScheduledActionService.Find(PERIODICTASKNAME) != null)
StopPeriodicTask();
ScheduledActionService.Add(_tskPeriodic);
}
privatevoidStopPeriodicTask()
{
ScheduledActionService.Remove(PERIODICTASKNAME);
}
privateboolIsTaskStart()
{
if (_tskPeriodic != null&& _tskPeriodic.IsScheduled)
returntrue;
elseif (_tskRI != null&& _tskRI.IsScheduled)
returntrue;
returnfalse;
}
privatestringGetTaskDescription()
{
if (_tskPeriodic != null&& _tskPeriodic.IsScheduled)
return _tskPeriodic.Description;
elseif (_tskRI != null&& _tskRI.IsScheduled)
return _tskRI.Description;
returnstring.Empty;
}
privatevoidStartRITask()
{
_tskRI = newResourceIntensiveTask(RITASKNAME);
_tskRI.Description = “启动ResourceIntensiveTask”;
if (ScheduledActionService.Find(RITASKNAME) != null)
StopRITask();
ScheduledActionService.Add(_tskRI);
}
privatevoidStopRITask()
{
ScheduledActionService.Remove(RITASKNAME);
}
2. 运行效果
退出程序,进入设置,在应用程序下面的 Background task可以看到这个程序正在后台运行,并且可以关闭这个后台运行的task。
分享到:
相关推荐
NULL 博文链接:https://rmn190.iteye.com/blog/273564
spring boot工程的定时任务
基于SpringBoot和Spring自带的schedul-springboot-task-scheduled
light-task-scheduler, Distributed Scheduled Job Framework
Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析,做了一些测试说明了各个参数的作用
spring boot @scheduled注解 cron 表达式实现计划任务调度。
module " fargate-scheduled-task " { source = " baikonur-oss/fargate-scheduled-task/aws " version = " v2.0.2 " name = " dev-batch-foo " schedule_expression = " cron(40 1 * * ? *) " is_enabled = " ...
在不停服务的情况下,动态修改Spring定时任务的执行周期,即动态修改定时任务的cron参数。
简单实用的task定时任务实例代码,使用springMVC框架,可在此基础上进行功能扩展。
IDEA使用springboot自带scheduled实现任务调度 代码解析:https://www.cnblogs.com/personblog/p/14237202.html
开发目的:因为每月的月底需要提交 考勤表 担心忘记提交 ...使用技术:scheduled 线程池定时循环 使用 socket发送Email(无需email Jar包发送邮件) 重要配置文件:pwd.properties 其中要填写好 邮箱 和 邮箱密码 等信息
spring @Scheduled定时任务代码
标签:archiva-scheduled-1.2.jar,archiva,scheduled,1.2,jar包下载,依赖包
计划任务工基于workerman和yaf开发的计划任务系统。web端管理计划任务,查看任务日志,异常报警。如果计划任务很少,直接用linux的crontab即可。... web在线管理计划任务,主要功能管理计划任务列表,添加用户,查看...
一,任务列表(多个定时任务可在task:scheduled-tasks中写多个task:scheduled-task) <task:scheduled-tasks> <task:scheduled ref="myTaskXml" method="quartzList" cron="*/5 * * * * ?"/> </task:scheduled-...
标签:archiva-scheduled-1.3.2.jar,archiva,scheduled,1.3.2,jar包下载,依赖包
标签:archiva-scheduled-1.0.2.jar,archiva,scheduled,1.0.2,jar包下载,依赖包
标签:archiva-scheduled-1.1.jar,archiva,scheduled,1.1,jar包下载,依赖包
使用spring @Scheduled注解执行定时任务
GitHub操作的ECS“将任务定义部署到预定任务”操作 ...目录 致谢 该项目是的分支,已对其进行了修改和重新设置以与... uses : airfordable/ecs-deploy-task-definition-to-scheduled-task@v2.0.0 with : cluster : my-c