Windows Phone开发(3):棋子未动,先观全局

移动开发
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验整合至手机中。

在进行WP开发之前,与其它开发技术一样,我们需要简单了解一个WP应用序的生命周期,我们不一定要深入了解,但至少要知道在应用程序生命周期内的每一阶段,我们应当做什么,不推荐哪些操作等,这也是为了让我们开发出更高性能,更优秀的应用程序打下坚实的基础。

下图是官方给出的WP应用程序执行模型图。

在上图中,我们要注意以下四个事件:

1、Launching 事件。

说白了,就是应用程序刚启动时触发的事件,由于这个事件的一点特殊性,尽量不要在该事件处理程序中做大量的操作,比如比较耗时间的作业,为什么呢? 你想想,如果你的某个操作需要消耗大量时间的话,那么,你肯定会发现,程序启动的速度很慢,这样一来,用户会很不爽,用户体验就大打折扣。

2、Activated事件。

应用程序被激活时触发,例如,我的程序上面有一个按钮,用户点击后打开发短信的“窗口”,当用户发送完短信后,发短信的页面就关闭,这时候,我们的应用程序又从后台程序变为前台程序了,Activated事件将触发,注意的是,***次启动程序时是不触发该事件的。

3、Deactivated事件。

与Activated事件相对,比如上面举的例子,当我在程序上点击按钮时,发送短信的页面将启动,这时候,当前应用程序就被前面的发短信的页面挡 住了,也就是说,当前程序被发送到后台,这个时刻就触发了Deactivated事件。不过,如果应用程序将关闭,该事件不触发。

4、Closing事件。

从字面意思就猜到该事件在啥时候发生了。对,当应用程序关闭时发生,但在应用程在导航中被发送到后台时不发生,比如刚才说的打开发短信的页面后,虽 然程序被发送到后台了,但由于它仍在运行,没有退出,所以这个时候不触发。但如果我从“开始”或桌面磁砖中启动程序后,然后再通过“返回”键回到桌面,这 个时候因为程序会退出,所以该事件触发。

为了验证这些事件是如何发生的,我们在app.xaml.cs文件中,分别为这几个事件写下调试输出代码。

  1. // 应用程序启动(例如,从“开始”菜单启动)时执行的代码 
  2.         // 此代码在重新激活应用程序时不执行; 
  3.         private void Application_Launching(object sender, LaunchingEventArgs e) 
  4.         { 
  5.             System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 应用程序***启动。"); 
  6.         } 
  7.  
  8.         // 激活应用程序(置于前台)时执行的代码 
  9.         // 此代码在***启动应用程序时不执行 
  10.         private void Application_Activated(object sender, ActivatedEventArgs e) 
  11.         { 
  12.             System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 应用程序被激活。"); 
  13.         } 
  14.  
  15.         // 停用应用程序(发送到后台)时执行的代码 
  16.         // 此代码在应用程序关闭时不执行 
  17.         private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
  18.         { 
  19.             System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 应用程序休眠。"); 
  20.         } 
  21.  
  22.         // 应用程序关闭(例如,用户点击“后退”)时执行的代码 
  23.         // 此代码在停用应用程序时不执行 
  24.         private void Application_Closing(object sender, ClosingEventArgs e) 
  25.         { 
  26.             System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 应用程序关闭。"); 
  27.         } 

然后,我们运行程序,当主页面出现后,点击模拟器上的“返回”键把程序关闭。

这时候,我们再去看一下“输出”窗口。

通过这个实验,我们发现Activated事件和Deactivated事件未被触发,为什么?自己思考吧。

下面,我们在页面中放一个按钮,点击按钮后,打开发送短信的页面。

  1. <!--ContentPanel - 在此处放置其他内容--> 
  2. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"
  3.     <Button VerticalAlignment="Top" 
  4.             HorizontalAlignment="Center" 
  5.             Content="请点击我" 
  6.             FontSize="64" 
  7.             Click="Button_Click" 
  8.             Margin="0,12,0,0"/> 
  9. </Grid> 

编写单击事件代码。

  1. private void Button_Click(object sender, RoutedEventArgs e) 
  2.     Microsoft.Phone.Tasks.SmsComposeTask sms = new Microsoft.Phone.Tasks.SmsComposeTask(); 
  3.     sms.To = "13672265138"
  4.     sms.Body = "你好啊,今天中午请我吃牛肉炒饭吗?"
  5.     sms.Show(); 

按F5运行,再点击按钮,打开发短信页面。

看看“输出”窗口,这时候,就看到Deactivated事件发生了,因为程序还没有退出,只是被放到后台。

接着,点击模拟器的“返回”,退回到我们的程序。再看看输出窗口。

这个时候,Activated事件就发生了。

OK,今天的牛皮就吹到这里吧。

责任编辑:闫佳明 来源: oschina
相关推荐

2013-07-30 12:37:56

Windows PhoWindows Pho

2010-04-21 17:07:54

Windows Pho

2011-06-07 12:42:15

Windows Pho

2013-04-17 14:00:06

Windows PhoWindows Pho

2013-04-16 17:02:50

Windows Pho概论

2013-04-19 16:34:56

Windows PhoWindows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho

2010-09-08 11:26:26

Windows PhoXNA 4.0 3D游戏开发

2010-04-08 17:40:23

Windows Pho

2013-04-17 14:47:19

Windows PhoWindows Pho

2012-08-16 10:35:50

Windows Pho

2013-04-17 13:27:04

Windows PhoWindows Pho

2013-07-31 13:03:51

Windows PhoWindows Pho

2011-06-07 11:35:38

Windows Pho

2010-07-16 15:29:02

Windows Pho

2013-04-19 15:35:54

Windows Pho隔离存储

2010-12-14 18:48:49

微软

2012-06-04 14:47:58

Windows Pho

2013-07-31 13:13:50

Windows PhoMVVM模式

2013-07-31 12:50:39

搭建Windows PWindows Pho
点赞
收藏

51CTO技术栈公众号