Background Agent and Scheduled Task

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

BackgroundAgent

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

ScheduledTaskAgent

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

ScheduledTask

包含PeriodicTask和ResourceIntensiveTask两种 Task。

PeriodicTask

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

ResourceIntensiveTask

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

后台运行不支持的API
命名空间不支持的 API
Microsoft.DevicesCamera
Microsoft.DevicesVibrateController
Microsoft.DevicesNowPlaying
Microsoft.Devices.Radio所有API都不支持
Microsoft.Devices.Sensors所有API都不支持
Microsoft.Phone.BackgroundAudioBackgroundAudioPlayer
Microsoft.Phone.BackgroundTransferAdd(BackgroundTransferRequest)
Microsoft.Phone.ControlsWebBrowser
Microsoft.Phone.InfoIsKeyboardDeployed
Microsoft.Phone.Notification所有API都不支持
Microsoft.Phone.SchedulerAdd(ScheduledAction)
Microsoft.Phone.Shell只支持这三个API

·         ShellToast

·         Update(ShellTileData)

·         Delete()

Microsoft.Phone.Tasks所有API都不支持
Microsoft.Xna所有XNA API都不支持
System.WindowsMessageBox
System.WindowsClipboard
System.Windows.ControlsMediaElement
System.Windows.ControlsMultiScaleImage
System.Windows.MediaLicenseAcquirer
System.Windows.MediaA/V Capture
System.Windows.Navigation所有API都不支持
GeoCoordinateWatcher这个API 在后台运行时,不能实时获取数据,而是每10分钟更新一次Cached Location值。
内存使用要求

Periodic agents 和Resource-intensive agents 使用内存不能大于 5 MB 。Audio agents可以使用 15 MB内存。如果超过这个范围 Scheduled Task就会被立即终止。

ExpirationTime

通过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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值