• Windows Phone的网络连接策略(转)


     

    原文链接:http://www.cnblogs.com/procoder/archive/2011/10/28/WIndows-Phone-Idle-Mode.html 

    Windows Phone的网络连接策略

    前言

    在微薄中“有人”(我记得是谁,^_^)问起Windows Phone在锁屏下是否继续链接WiFi,引起了很多WP微博控在讨论,其实我本来不关心这个问题的,因为这个是不可控的,但是讨论的人太多了,因此我想聊聊我对Windows Phone的网络连接策略的想法。

    问题定义

    这个问题可以简单的重新定义为Windows Phone在空闲(idle)情况下,是否进行网络链接。到底使用哪种链接方式,是由Windows Phone的策略所决定的,这种策略基本上是考虑电池使用量和链接成本($$$$$$$)等因素。

    多任务之梦

    如果有人觉得Windows Phone是单任务,在锁屏的时候会把所有app杀死了,那么他/她可能给水军给忽悠了,Windows Phone从第一天开始就是一个多任务操作系统,所以在锁屏情况下继续保持网络链接,继续完成后台任务是可能的。但微软一般不这样做,而且限制app开发者这样做,这些都是为了提供更好的用户体验。

    到底链接or断开?

    我的答案是yes and no,呵呵。在Windows Phone锁屏的情况下,到底继续保持链接还是断开链接,不能简单的回答,因为这个操作是根据策略来决定的。这些策略的目的都是为了提供更好的用户体验,这种策略简单可以参考下面的公式:

    任务类型 + 电源状态 = 是否断开链接

    根据之前重新定义,公式可以替换为:

    任务类型 + 电源状态 + 可用网络链接媒体(WiFi/3G) = 是否进行网络链接

    也就是说在不同的情况下,Windows Phone会相应的保持或者断开链接。这也是现代智能手机系统(WP, Android,iOS)最最基本的功能了。现代的智能手机系统一般都由系统来进行电源管理和网络连接管理。请注意我把“系统”两个字重点加粗了,因为非现代智能手机系统可能是把主动权交给了应用(app)来管理的(当然最终操作系统保留了最高决定权),例如以前的Windows Mobile是由应用来决定打开和关闭网络连接,打开3G还是WiFi,试问一个app开发者怎么要肩负着OS开发者的责任,需要考虑的情况也太多了。再例如Symbian的app在启动是会提示“是否打开网络连接,到底打开3G还是WiFi”,把链接责任推给了用户。这些老系统都极大破坏了用户体验。

    -------------------------貌似合理的跑题-------------------------------------------------------------------------------------

    下面举一个Agile的例子,讨论一下用户到底要什么:

    最为一个非技术用户,如果我想看微薄,那么打开微薄app就可以看。

    这里的非技术用户根本就不关心手机的链接状态,关心的是是否能查看和发微薄

    这里用户故事有以下的附加条款(acceptance criteria):

    1.如果能接触(这里没有使用链接,其实也是这个意思,connect)到微薄后台服务,直接打开app,显示默认页,例如“@我的”

    2.如果不能接触到微薄后台服务,而且没有缓存,提示用户没网络链接,请稍候再试。

    3.如果不能接触到微薄后台服务,而且有缓存,提示用户只能看缓存。

    这个用户故事有个特点是,不由用户来决定,而是预定动作,强迫用户选择或接受,但是假装很尊重用户的样子。回到Jobs那句话,给用户最好的选择就是不给他选择。

    -------------------------跑回到主题上------------------------------------------------------------------------------------

    由此可以知道关心这种问题的都不是“非技术用户”,对,我就是说你,0_^。其实Windows Phone已经把管理网络链接的主动权收起来,统一由系统进行管理,作为app开发者不一定要把这个问题查根问底也能写出很优秀的程序,但是如果真的想知道,我下面尽力探讨一下。

    什么时候Windows Phone在空闲状态会进行网络链接

    上面讲到网络链接的策略,因此我们开发的app符合这些策略,就会在空闲状态下也进行网络链接。我尽力列出所有可能出现的情况:

    ApplicationIdleDetectionMode设置为disabled

    Windows Phone的app可以通过修改PhoneApplicationServiceApplicationIdleDetectionMode强制app在锁屏的时候不会被墓碑化(注意Mango发布后这个功能有时候是鸡肋了),这种程序一般是导航程序,音乐播放程序(mango后有替代方案,会在后面讲述),也就是手机锁屏,app还是继续运行,程序可以继续做一些网络request,这样WiFi链接就会保持(如果有WiFi链接的话)。但是根据微软的文档,在程序锁屏情况下应该停止/关闭很多操作,例如Timer,动画(animations ),重力加速计(accelerometer ),地理定位服务(Location Service ),FM收音机,同时断开网络链接等等。但是注意我这里使用了应该,没有说必须,因此app还是可以继续做网络请求的。

    Background Audio

    使用AudioPlayerAgent(后台音频播放)的app在锁屏的时候也可以继续播放,如果音频的url指定为网络的url,那么为了能正常播放,Windows Phone继续保持WiFi链接如果WiFi可用的话。

    Background File Transfers

    如果app使用了BackgroundTransferService(后台传输服务),那么程序会在特定情况下保持链接,继续下载,如果文件小于20M,Windows Phone会继续使用3G下载,如果文件100M以下,那么Windows Phone会继续使用WiFi下载文件,如果文件大于100M,必须外接电源和联通WiFi的情况下Windows Phone才会启动下载。

    Background Agents

    如果app使用了ScheduledTask(定时任务),那么程序在每隔一段时间会启动执行一下,可能有两种不同的任务如下

    PeriodicTask (周期性任务)会每隔30分钟执行一次,每次只能执行25秒。

    ResourceIntensiveTask (耗资源的任务)每隔10分钟执行一次,但是需要连接上外接电源。

    其中两种任务在执行过程都可以链接网络,请求网络资源的。

    Schedule Tile

    如果app使用了ShellTileSchedule(信息块更新任务),那么程序每隔一段时间可以更新Live Tile,如果Tile的图片在网络上,会启动网络链接。

    Tile Notification

    官方没有说明推送任务的实现细节,从系统角度看一般实现方法可能如下:

    1.通过sms触发手机去请求。

    2.手机定时pull(拉)信息。

    不管哪种方法,手机最终都是需要通过网络链接来取得推送服务的信息,因此也可能使用到网络链接。

    总结

    不管哪种方法,微软试图做的是提供良好的用户体验(包括电源消耗,反映速度,通信资费等等),因此作为app开发者,我们要做的是在现有的限制条件下,提供更好的用户体验,没必要为了数据长链接而破坏用户体验。

    有任何问题,请留言,或者微博我 @林永坚jake 谢谢!

  • 相关阅读:
    SGU 127. Telephone directory --- 模拟
    SGU 126. Boxes --- 模拟
    SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
    Codeforces Round #246 (Div. 2) B. Football Kit
    Codeforces Round #252 (Div. 2) C. Valera and Tubes
    Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array
    codeforces --- Round #250 (Div. 2) B. The Child and Set
    codeforces --- Round #250 (Div. 2) A. The Child and Homework
    AFNetworking 动态修改acceptableContentTypes 设置ContentType
    swift pod第三方OC库使用use_frameworks!导致#import提示无法找到头文件
  • 原文地址:https://www.cnblogs.com/moses/p/2229792.html
Copyright © 2020-2023  润新知