博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Background Agent and Scheduled Task
阅读量:7064 次
发布时间:2019-06-28

本文共 2815 字,大约阅读时间需要 9 分钟。

 

Wp7.1中实现了多任务,允许应用程序在后台运行。通过Scheduled Task Back Agent可以使程序在后台运行。

BackgroundAgent

ScheduledTaskAgent, AudioPlayerAgent, AudioStreamAgent所有具有后台运行功能Agent的基类。

ScheduledTaskAgent

用于实现ScheduledTask,这个类包含一个OnInvoke方法,当ScheduledTask执行后会被调用。

ScheduledTask

包含PeriodicTaskResourceIntensiveTask两种 Task

PeriodicTask

可以使程序在后台运行,这个Task只能定期的运行在很少的时间量和很有限的设备资源上。

ResourceIntensiveTask

这个Task可以使用很多的设备资源,并且需要运行较长的时间周期,但是却很少运行。

后台运行不支持的API

命名空间

不支持的 API

Microsoft.Devices

Camera

Microsoft.Devices

所有API都不支持

所有API都不支持

所有API都不支持

只支持这三个API

·        

·        

·        

所有API都不支持

Microsoft.Xna

所有XNA API都不支持

System.Windows

MessageBox

System.Windows

Clipboard

System.Windows.Controls

MediaElement

System.Windows.Controls

MultiScaleImage

System.Windows.Media

LicenseAcquirer

System.Windows.Media

A/V Capture

System.Windows.Navigation

所有API都不支持

这个API 在后台运行时,不能实时获取数据,而是每10分钟更新一次Cached Location值。

内存使用要求

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

转载地址:http://jwnll.baihongyu.com/

你可能感兴趣的文章
WiFi Active Directory Network Policy Server Cisco WLAN Group Policy
查看>>
jetty client 与apache http client的实现、分析
查看>>
安装ubuntu14.04遇到网卡驱动不成功问题
查看>>
C语言链接mysql常用函数
查看>>
swap自动配置作业
查看>>
lsof命令的使用
查看>>
关于SQLite,SQLCipher和FMDB
查看>>
Docker--------registry私有仓库搭建 [ Http ]
查看>>
php-fpm常用配置
查看>>
判断元素是否可见的jQuery 新窗口打开图片
查看>>
马哥运维学习作业(一)
查看>>
java环境JDK安装及配置
查看>>
人工智能浪潮已至,李开复指出入局AI的四种方式
查看>>
序列化
查看>>
为什么ios不支持flash
查看>>
nginx配置文件中$request_uri到底是指的url里哪部分
查看>>
EX2T/EXT3文件系统
查看>>
Hadoop的MapReduce执行流程图
查看>>
了解你所不知道的SMON功能(十):维护SMON_SCN_TIME字典基表
查看>>
如何对压缩文件设置解压密码
查看>>