Background Agent and Scheduled Task

本文详细介绍了在WP7.1中实现多任务和后台运行的方法,包括如何使用ScheduledTask和BackAgent,以及后台运行的限制和注意事项。通过示例展示了创建并管理后台任务的步骤,以及如何在程序的前台与后台间交互。
 

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

VibrateController

Microsoft.Devices

NowPlaying

Microsoft.Devices.Radio

所有API都不支持

Microsoft.Devices.Sensors

所有API都不支持

Microsoft.Phone.BackgroundAudio

BackgroundAudioPlayer

Microsoft.Phone.BackgroundTransfer

Add(BackgroundTransferRequest)

Microsoft.Phone.Controls

WebBrowser

Microsoft.Phone.Info

IsKeyboardDeployed

Microsoft.Phone.Notification

所有API都不支持

Microsoft.Phone.Scheduler

Add(ScheduledAction)

Microsoft.Phone.Shell

只支持这三个API

·         ShellToast

·         Update(ShellTileData)

·         Delete()

Microsoft.Phone.Tasks

所有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都不支持

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

转载于:https://www.cnblogs.com/randylee/archive/2011/06/23/2087801.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值