我的回收站

技术文章、随笔、文摘及其它
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

你不可不知的Mango — 开发者篇(1)

Posted on 2011-05-26 02:03  被遗弃的小指  阅读(3671)  评论(6编辑  收藏  举报

昨天微软对外公布了Windows Phone的下一个代号为Mango的重要更新的更多细节,并在同时也发布了Mango的开发工具,Windows Phone Developer Tools 7.1(Beta)。本文将从开发者角度简单谈谈Mango带来哪些改变。

What’s New

image

首先让我们从上面这张图片来简单的看看Mango中都有啥让你心动不已的新玩意儿呢?

1。Sensor API:

增强了的各种传感器API。首先,在Mango中终于增加了指南针传感器的API,其次是Mango中新加入的可选的陀螺仪传 感器及其API。在MIX11中曾经提及过一个被称之为Motion Sensor的东东,不过这名字太容易引起误解。因为说起Sensor的话大家就会想起什么具体的硬件传感器。但是这里的Motion Sensor/Motion API只是将加速度传感器、指南针传感器以及陀螺仪的原始数据进行高层次的封装,以便让你更好的利用这些传感器的数据。所以,现在这组高度封装的API称 之为Motion API。

其次,在Mango中终于允许你直接来访问摄像头的原始的帧数据。初此之外还包括闪光灯、自动对焦、快门按钮等。这样使得你来开发出自己类似于Camera360之类的特效拍照软件或者说某些实景增强软件成为可能性。

2。Multi Tasking:

也就是大家议论最多的多任务功能了。首先是Fast App Switching,应用程序快速切换。其实用户才不在乎你到底是不是什么多任务呢。他们关心的是我打开程序A,然后切出去使用程序B,当我回到程序A的时候这个程序A是不是能够接着刚才中断的地方接着往下进行,当然这个程序A得要能够快速的切换过来才行。

为了解决这个需求,在Windows Phone 7的时代微软提出了一个Tombstoned(墓碑机制)的概念。也就是在你的程序正在运行的时候,如果按下Home键切出去或者受到某些干扰(例如你在 程序里面打开了联系人选择器等)被Deactive的时候,你的程序将会进入一个墓碑化的状态。在这个墓碑化的状态时你需要来自己把当前的所有状态都保存 下来,而你的程序实际上已经退出运行状态。然后你的程序被再次激活(例如选择器被关闭)(Active)的时候,系统会自动进入你刚才进入墓碑机制的那个 页面,你需要在代码中手工再恢复刚才保存的那些数据。这样形成一个任务切换到后台,然后再次恢复的体验。

image

但是这种操作的致命缺点就是所有的程序在切换出去后都需要墓碑化这导致切换的效率极低。所以,在Mango中引入了一个新的状态,被称之为 Dormant(休眠)。在一个程序被停用的时候,它首先尝试着进入Dormant状态。Dormant状态中程序并没退出,而是该程序中所有的线程活动 都将被挂起保留在内存中。当你的程序被再次激活的时候,它就可以简单的把程序从休眠状态中恢复过来。这样程序的切换和恢复就很快了。但是,并不是所有的程 序被切换后都会进入Dormant状态,这取决于当前的系统资源。如果内存不足了,它会将你的程序自动的切换到墓杯化状态。而从墓碑化状态再恢复过来的话 就需要你做一些和以前一样的状态恢复工作了。通过Dormant,Mango使得快速的应用程序切换和恢复成为可能性。

image

那么系统中有多少程序可以被同时休眠?文档中似乎并没有提及,据WPMind判断,这应该取决于系统的内存。而进入墓碑化状态的程序则有上限,那就是同时只有5个墓碑化的程序。

但是你会说Dormant不是真正的多任务啊。是的,这并不是真正的多任务。因为你的程序休眠后系统中并发运行的第三方应用始终还只是一个。好吧,这就依赖于Mango中其他两个最重要的概念了:Notification ServiceBackground Agents

Notification Service,在文档中也被称之为Scheduled Notification。它可以让你的程序指定在某个时间间隔后向用户发出一个Alerm或者Reminder对话框。当然,这时候你的程序可能并没有 运行(甚至是手机已经重启了)。而你可以指定用户在遇到Reminder对话框的时候来打开你自己程序并进入一个特定页面。

imageimage

除了Notification Service之外,Mango还提供了Background Agents,也被称为Scheduled Tasks。它允许你的程序在后台执行某些任务,当然这时候你的程序可以没有在前台运行。这里有两种Background Agents可以使用,PeriodicTask和ResourceIntensiveTask。

Periodic Agents通常每30分钟运行15秒。使用这种Agent,你可以让系统周期的去做一些小的任务,例如获取你的位置、和服务器同步数据等等。

ResourceIntensiveTask即Resource-intensive Agent,它可以在你的手机空闲(CPU空闲,没有拨打电话等)并且电量充足(插着电源或者90%以上的电量)的时候自动的持续运行10分钟。不过还有 一个更变态的需求,就是手机这时候没有数据网络的连接。也就意味着你的手机必须是通过Wi-Fi或者USB线连接到电脑上来上网的。这种场景 下,WPMind认为比较适合于某些行业用户,例如出去集采信息,回到办公室后将手机连接到电源上然后进行大量数据的同步。

除此之外,其实Mango还有两个后台服务可以用于一些后台应用场景:Background File Transfer ServiceBackground Audio Service。Background File Transfer Service可以让你的程序在后台与其他Web服务器进行通讯(Get 或者 POST)来上传或者下载文件。不过通过Post上传的数据不得超过3M,而下载的数据如果超过20M只能是手机处于WiFi或者USB线连接的时候才可 以。使用该服务之需要指定目标、本地存储路径和传输方式(GET还是POST)就可以,再也不需要你自己去处理复杂的什么HttpWebRequest对 象了。

至于Background Audio服务则可以允许你的程序在后台运行时播放、控制音乐。想要制作自己的音乐播放器的兄弟终于可以放轻松了,毕竟在Windows Phone 7中由于不支持这功能很多人都打消了做自己的音乐播放器的念头。

通过Fast App Switching和Background Agents、Notification Service以及刚才介绍的Background File Transfer Service和Background Audio Service,Mango终于为开发人员打开了一些通道从而使得你可以开发出更有意思的一些应用来。

好的,今天就先写到这里,明天继续给大家介绍这张图片中剩下的部分。


注意:本文内容源自 MIX11部分课程内容以及Windows Phone Developer Tools 7.1 (Beta)的文档,本文提及的Mango相关知识在Mango的正式版本上市之后或许会有所改变。

延伸阅读:【MIX11】多图揭秘Mango

原文首发于WPMind.com