代理资源[置顶] Windows Phone代理详解

最近一直在研究代理资源之类的问题,现在正好有机会和大家讨论一下.

    应用于Windows Phone 8 | Windows Phone OS 7.1

     

    调度任务和后台代理使得一个应用即使不在前台运行时也能在后台执行代码。不同类型的调度任务被设计用于不同类型的后台处理场景,并因此具有不同的行为和制约。本主题描述了调度、延续时光和制约等方面的问题。

    此主题包含以下部分:

    ·        调度任务的类型

    ·        后台代理的生命周期

    ·        全部调度任务类型的制约

    ·        周期性代理的制约

    ·        资源集中型代理的制约

    ·        相干主题

    

Scheduled Task的类型

 SHAPE \* MERGEFORMAT

    上面所列的是Scheduled Task的类型。注意ScheduledTask 是从ScheduledAction派生的。运行于后台的代码存放于从ScheduledTaskAgent派生的类中,而ScheduledTaskAgent是从类BackgroundAgent派生的。

 

    

Scheduled Task 类型

描述

PeriodicTask

    周期性代理,每经过一个周期性循环间隔就运行一小段时光。使用此种任务的典范情况包含上传设备的位置和执行小量的数据同步。

ResourceIntensiveTask

    资源密集型代理,指当phone碰到与处理器activity、电源、网络连接相干的集中需求时需运行绝对较长一段时光的后台代理。应用这种任务的一个典范的场合是当phone没有被用户使用而未处于活动状态时,后台同步大批的数据到phone上。

    

后台代理的生命周期

 SHAPE \* MERGEFORMAT

    一个应用可能只有一个后台代理。这个代理可以被注册为一个PeriodicTask,一个ResourceIntensiveTask,或两者兼具。对代理运行所使用的调度算法依赖于任务所注册的类型。在某一时辰,只有一个代理的实例在运行。

    代理的代码在一个BackgroundAgent派生类中实现。当代理被启动,操作系统会调用其OnInvoke(ScheduledTask)方法。在此方法中,应用可以肯定是被作为哪类类型的ScheduledTask在运行,然后执行适合的动作。当代理完成了它的任务,它应当调用NotifyComplete Abort 以使操作系统晓得它完成了。NotifyComplete 应在任务执行胜利后使用。如果代理不能执行它的任务-比如所需的服务端不能连接了-那么代理应当调用Abort,这使得IsScheduled 属性被置为false。前台应用可以检查此属性以肯定是不是后台调用了Abort。

 

    

各调度任务的类型的独特制约

 SHAPE \* MERGEFORMAT

    上面的约束应用于全部的Scheduled Tasks。

 

    每日一道理
生活中受伤难免,失败跌倒并不可怕,可怕的是因此而一蹶不振,失去了对人生的追求与远大的理想。没有一个人的前进道路是平平稳稳的,就算是河中穿梭航行的船只也难免颠簸,生活中所遇上的坎坷磨难不是偶尔给予的为难,而是必然所经受的磨练。

    

制约

描述

不支持的APIs

    有很多API不能被任何Scheduled Task使用。使用这些API 不是导致运行时抛出异常,就是导致在提交应用到商店时认证失败。要查看被制约的API们,见Unsupported APIs for background agents for Windows Phone

内存使用制约

    周期性代理和资源密集型代理不论任何时辰都不能使用超过6 MB内存。音频代理制约到15 MB。如果一个Scheduled Task 超越了这个内存数量,它将被立即终止。

    当运行于debugger模式时,内存和超时的制约被临时取消。你可以使用ApplicationMemoryUsageLimit API 来查询前台应用和后台代理的内存制约。

每两周需重新调度一次

    使用ScheduledTaskExpirationTime 属性来设置多长时光之后停止任务的调度。当action 是被Add(ScheduledAction)方法所调度时,此值必须被设置为小于两周的时光。当与任务干系的应用在前台运行时,它可能重新调度任务从而重新把运行期限设置为从现在开始的两周。存在很多使一个应用的后台代理不会停止或会重生的情况,如果你的应用的Tile被固定在开始屏幕上了,你的后台代理在任何调用Update(ShellTileData) 来更新Tile时,其生存时光会被自动扩展到两周。更多信息见Tiles for Windows Phone.

    如果你的应用被用户选择表现于锁屏上,你的后台代理的生存期在每次它调用Update(ShellTileData)来更新锁屏时自动扩展到两周。更多的信息,见Lock screen notifications for Windows Phone 8

    如果你的应用使用一个资源密集型代理自动上传图像,如果用户在图像+相机设置页中为你的应用启动了此特性,那么这个资源密集型代理的调度将永不停止。更多的信息,见 Auto-upload apps for Windows Phone 8

 

连续两次崩溃后代理停止调度

    周期性和资源密集型代理都会在因为超越内存配额或且它任何未处理的异常连续两次退出后停止调度。代理必须通过前台进程才能重新调度。

    

周期性代理的制约

 SHAPE \* MERGEFORMAT

    上面是代理的调度,延续时光和普遍性的制约。

    

制约

描述

调度间隔:30分钟

    周期性代理一般每30分钟运行一次。为了延伸待机时光, 周期性代理可能调整到与其它后台进程相连的时光运行,所以其执行时光可能会有10分种的波动。

调度延续:25秒

    周其性代理通常运行25秒。也有其它的制约条件可能导致一个代理过早终止。

省电模式可以阻挠执行

    省电模式是一个选项,用户可以启用它来表明优先节省用电量,如果此模式被启用,即使超过了间隔时光 ,周期性代理可能不再运行。

各设备的周期性代理制约

    为了帮助最大程度的节省电量,有一个对于周期性代理的数量上的硬划定。这跟据每一个设备的配置而不同,它最低可以到6。还有一个制约低于硬划定数,在超过这个制约之后用户被警告有多个后台代理运行从而使电量被快速消耗。

注意:

    如果你想在超越设备的制约数后添加一个周期性后台代理的话,对Add(ScheduledAction) 的调用将抛出一个InvalidOperationException。因为各设备的周期性代理数制约的太低,所以你的应用很轻易碰到这个问题。所以,当添加周期性代理时,捕获这个异常是非常重要的,这样你的应用才不会崩溃。示例代码可以在这里Background agent best practices for Windows Phone.找到。

 

    

资源密集型代理的制约

 SHAPE \* MERGEFORMAT

    上面是资源密集型代理的调度,延续时光,和一般性制约。

 

    

制约

描述

延续:10分钟

    资源密集型代理一般只运行10分钟。还有一些其它制约可能导致一个代理过早终止。

须要外部电源

    资源密集型代理只有在设备连接到一个外部电源时才运行。

非蜂窝连接

    资源密集型代理只有在建立Wi-Fi连接或通过连接到PC建立网络连接时才运行。

最小电量

    资源密集型代理只有在设备的电量大于90%时才运行。

须要锁屏

    资源密集型代理只有在锁屏时才会运行。

不通话

    资源密集型代理不会在打电话时运行。

不能改变网络到蜂窝

    如果一个资源密集型代理试图调用AssociateToNetworkInterface(Socket, NetworkInterfaceInfo) 时指定了MobileBroadbandGSM或MobileBroadbandCDMA,调用会失败。

    如果一个设备进入一个状态,这个状态满意了以上全部条件然后一个资源密集型代理开始运行,之后设备的状态就发生了改变,然后其中某一项条件不再满意,那么这个资源密集型代理将立即终止。

    

注意:

    由于设备的全部条件都满意才能运行资源密集型代理,可能会出现一个代理在某个设备上永久不能运行。例如,如果一个用户没有连接Wi-Fi或一个PC,它将永不能获得一个非蜂窝连接,并且资源密集型代理将永不运行。同时,资源密集型代理只能有一个在运行,所以当更多的应用使用资源密集型代理时,某个代理运行的希望更加迷茫。你应当在设计你的应用时仔细斟酌这个问题。

文章结束给大家分享下程序员的一些笑话语录: 火车
一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现 列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶 奶和一个年轻漂亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较 暧昧地相互看对方。这时,火车进入山洞,车厢里一片漆黑。此时,只听见 一个亲嘴的声音,随后就听到一个响亮的巴掌声。很快火车出了山洞,他们 四个人都不说话。
那个老奶奶在喃喃道, “这个年轻小伙怎么这么无礼, 不过我很高兴我的孙女 扇了一个巴掌”。
项目经理在想,“没想到这个程序员居然这么大胆,敢去亲那姑娘,只可惜那 姑娘打错了人,居然给打了我。”
漂亮的姑娘想,“他亲了我真好,希望我的祖母没有打疼他”。
程序员坐在那里露出了笑容, “生活真好啊。 这一辈子能有几次机会可以在亲 一个美女的同时打项目经理一巴掌啊”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值