作者felaray (<^)<)
看板WindowsPhone
标题Re: [讨论] 为何WP7比Android还顺? 从设计概念说起
时间Wed Oct 19 01:17:38 2011
看大家讨论的很热烈 很想修文来回应 不过怕修到大家的讨论XD
我这篇提供一篇翻译过後的文章,来源是大陆的百度网。(以下资料应该是7.0的)
墓碑机制
墓碑机制简单定义
墓碑机制是微软Windows Phone 7手机操作系统中的一个程序运行规则。 说简单点,就是
手机上一个任务被迫中断时(如有电话打入),系统记录下当前应用程序的状态後,(像
把事件记录在墓碑上一样),然後中止程序。 当需要恢复时,根据“墓碑”上的内容,
将程序恢复到中断之前的状态。 这样的一种机制就是“墓碑机制”
墓碑机制具体表现
微软在今年发布了全新的Windows Phone 7手机操作系统,但令人不解的是,WP7却不支持
多任务运行。 据了解,WP7并不是严格的单任务,比如WP7中微软自家的IE和ZUNE就能同
时运行。
首先来说一些WP7系统程序运行的基本规则, 微软不允许任何第三方应用程序在WP7的後
台运行 ,特定时间内只有一个应用程序的在前台运行 , 如果你的应用程序没有在前台
显示,就表示这些程序并没有运行 ,这样就不耗费运行内存和处理器资源。 这样做主要
是为了延长电池续航时间,并保证响应一致的用户体验。
但是所有的WP7手机都将配备返回按钮硬件,这个按钮除了有返回导航功能之外,还将支
持应用程序之间的切换,比如当你在某个应用程序时点击了里面的网页链接,然後调用内
置浏览器进行查看,在查看完毕之後就可以按返回键重新返回刚才的程序。
现在问题就出来了,
当前的应用程序切换回之前的应用时,究竟是恢复了一个应用还是重
新打开了这个应用呢? 因为刚才已经说过了,WP7不允许後台运行程序,而两者的区别就
是,重新打开时不会保持刚才的使用状态,恢复是可以延续使用状态的,这就要说到微软
的
墓碑(Tombstone )机制了。
墓碑是微软为WP7切换应用程序状态的一种处理机制,以使用过程为例,当用户正在使用
一个应用程序,比如游戏或者新闻阅读,这时有电话打进来,来电提示和通话页面将会在
前台显示,正在运行的游戏就会消失,但是
WP7不允许背景执行应用,这时候墓碑机制就
会触发, 游戏的运行状态包括画面、进度等等
数据会冻结保存 ,相当於暂停,但是游戏
确实没有运行,这也是墓碑名字的含义:应用程序已经死了,但是墓碑上记录有临终前的
所有状态。 当通话结束後,游戏操作系统会将应用程序进程重新启动,并将状态数据传
递为应用进行恢复,这也相当於应用从墓地里面爬出来,并按照墓碑上记录的状态进行还
原。
在程序代码示例中,微软给出了单个应用程序的运行状态代码,共有四个App.xaml.cs文
件,这些直接关系到执行模式的代码分别是Application_ Launching、Application_
Activated、Application_ Deactivated、Application_ Closing,分别是启动、复活(
激活程序恢复状态)、停用(记录墓碑数据)、关闭(彻底关闭)。 开发者们需要注意
的是,在开发过程中需要使用微软给出的工具和相关代码才能让自己的应用支持墓碑机制
,否则当用户正在使用的时候突然一个电话过来之後就得再次手动打开程序重头再来,这
会让用户非常不爽。
(原po:这真的让人很不爽 尤其是很多小游戏很容易跳出要重玩)
在早期的WP7系统中,微软并没有在程序不运行的时候将进程彻底杀死,而是将其暂停,
但是这种情况导致了後台运行堆栈的混乱, API和事件触发经常会出现问题,所以微软才
决定使用墓碑机制。
不过完全实行墓碑机制将会影响到电话的某些功能,比如短信、即时通信、天气等需要时
刻保持运行和更新的应用,微软同样给出了推送通知服务(Push Notification Services
)的API ,允许应用程序调用该接口保持实时更新。
--
1F:推 KevinLomax:楼下w96284cn07/25 13:32
2F:→ w96284cn:你当我那麽宅每篇都回吗?07/25 13:36
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.70.141
3F:推 james732 :那可以一边听音乐一边做其他的事吗? 10/19 01:41
4F:→ james732 :这样听起来似乎不能写出作为server端的应用程式…? 10/19 01:42
5F:→ friedpig :我记得没错的话内建的播放程式可以 其他的就不知道了 10/19 01:43
6F:→ felaray :当然可以! 这是7.0的 7.1的请看"多工"的资料 10/19 01:43
7F:→ felaray :因为7.0不支援多工,7.1(芒果)就支援了! 10/19 01:44
8F:→ james732 :楼上说的资料要去哪里看呢? (我承认我非常不熟XD) 10/19 01:48
10F:推 james732 :感谢,好久没有写微软的程式了...XD 10/19 01:56
11F:→ hatarakiman :7.1? 7.5? @@ 10/19 01:57
12F:→ felaray :正式版本编号为7.1(Mango) 当然也有人称7.5.. 10/19 02:00
13F:→ hatarakiman :感谢解说^^ 10/19 02:00
14F:→ felaray :要开发的话可能要学C# / silverlight /blend XD 10/19 02:00
15F:→ felaray :书籍可以参考版上有的文章 10/19 02:00
16F:→ james732 :WP有像Android那样释放原始码吗,还是像Win一样封闭? 10/19 02:02
17F:→ felaray :封闭式的~ 10/19 02:04
18F:→ james732 :了解,感谢您回答我的笨问题XD 10/19 02:04
19F:→ felaray :不会啦 android原本其实是linux社群的产物 所以也是 10/19 02:06
20F:→ felaray :走开放式原始码~ 10/19 02:06
21F:→ james732 :我会去乱挖Android比较简单的回来看,所以很好奇WP 10/19 02:07
22F:→ james732 :有没有地方可以挖...XD 10/19 02:07
23F:→ felaray :WP7的MSDN社群里面 有链金室 有些范例code 10/19 02:09
24F:→ james732 :再问,自己写程式放进WP手机,会像Android那麽简单, 10/19 02:11
25F:→ james732 :还是像iOS那麽麻烦? 10/19 02:11
26F:→ friedpig :像IOS 10/19 02:12
1.注册app hub帐号
2.在app hub注册手机为开发手机
3.在VS2010(开发工具)透过手机模拟器执行app / 或是接上USB传进去手机上执行
※ 编辑: felaray 来自: 61.62.70.141 (10/19 02:15)
27F:推 james732 :了解,我来研究一下细节XD 10/19 02:17
28F:→ felaray :晚安 今晚玩累了 睡觉XD 难得整天逛PTT..都怪版主丢 10/19 02:18
29F:→ felaray :了我这个问题 害我想好好回答XD 10/19 02:18
30F:推 james732 :不过要感谢您让我这个凑热闹的乡民学到好多XD 10/19 02:20
31F:推 ethan4ptt :感谢好文,看起来墓碑机制跟iOS的伪多工有点像 10/19 03:14
32F:推 cainhighwind:所以前一篇提到微软会要求载入时间就是因为实际上 10/19 08:11
33F:→ cainhighwind:程式会被关闭哩 10/19 08:11
34F:推 alljerry04 :版本号7.1 产品名称 7.5 开发代号Mango 10/19 11:14
35F:推 stalinone :Mango有quick resume和background agent两个东西 10/19 20:09
※ felaray:转录至看板 MobileComm 12/09 14:58