Windows Phone 7 开发 31 日谈——第14日:墓碑机制(多任务)
第14日。
昨天,我们讨论了使用位置数据为用户提供一种更加熟悉的感觉。今天,我写的内容可能是Windows Phone 7上面最有争议的话题:多任务。
现在有大量的文章都在写Windows Phone 7将会很纠结,在列表中第一位的就是“缺少多任务”。
Windows Phone 7确实有多任务
是的,这是我说的。这么说因为这是真的。一个Windows Phone绝对是一个多任务的设备。我可以在听音乐的同时玩游戏,或者在上网的时候收邮件。错误的消息是我们应用程序的开发人员传出的,在开发我们发现不能构建在后台运行的程序。
在我为Windows Phone 7工作的几个月中,我只能提出2个真正有说服力的在我的电话中运行后台应用程序的原因。
- 播放音乐的程序。如Pandora程序。我完全认同它在后台中运行。如果音乐停止了用户一定会发现的。
- 需要从设备传感器中获取数据的程序,如GPS,如果程序没有运行,我就无法告诉你已经走完了你想走的4英里路程。
在这两种情况之外,我并没有觉得有哪些情况是必须要让程序能在后台运行的。(如果你的程序在上述任何一类中,你可以向“当权者”呼吁要访问一个能使程序在后台运行的“超级API”。但我还是要提醒你……为获取访问权准备一个非常充分的理由。)
你可能会问“但是我如何从我的Web Service中获得更新呢?难道我不用运行就能获取吗?”我的答案是NO,你不能这么做。有一个叫做推送通知服务的强大机制可以以一种优雅的方式解决这个问题,这个我会在第19日中讲解。
对于剩下的程序,有一个叫做“墓碑”的机制允许我们让程序看起来总是在运行,即使进程已经被结束。下图演示了它是如何工作的:
正如你在上图中看到的,当用户进入或退出程序时我们可以利用停用和重新激活事件。通过这些事件,我们可以让用户觉得程序从来没有停止过运行。当我们加入独立存储(第15日)和推送通知(第19日)时,这将会变为一个非常给力的故事。
模拟多任务
在你的App.xaml.cs文件中有四个内建的方法(想了解项目文件结构的更多信息,请参见第1日)。来看一下带有内置注释的默认状态。
代码
// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
}
// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
补充:移动开发 , Windows Phone ,