惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
WordPress大学
WordPress大学
小众软件
小众软件
IT之家
IT之家
腾讯CDC
月光博客
月光博客
量子位
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 小镇

初识大数据(五. 大数据平台基本架构) 初识大数据(四. 大数据与人工智能的关系) 初识大数据(三. Hadoop与MPP数据仓库) 初识大数据(二. Hadoop是什么) 初识大数据(一. 什么是大数据) 我的微博 微软官方中文新书《Windows Phone 7应用开发指南 》出版 wp7.1 联系人 wp7.1 VideoBrush WP7.1 应用程序发布到Marketplace windows phone 7.1 RC 版 SDK 自定义控件库Daisy.WP7.Controls1.2版 wp7.1 使用本地数据库 Windows Phone 7.1 新增Task XNA绘制Silverlight控件 windows phone 7.1 XNA in Silverlight Wp7.1新增API windows phone 7.1 中两个新增控件 Windows Phone 7.1 发布了
Background Agent and Scheduled Task
小镇 · 2011-06-23 · via 博客园 - 小镇
 

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