Windows Phone 7处理休眠和墓碑的恢复

移动开发
休眠状态和墓碑状态这两个状态会比较容易让人混淆的,休眠状态时,程序停止运行,但不同的是此时整个进程还是存在于内存中。当恢复这个程序时,就不需要创建一个新的实例。

休眠状态和墓碑状态这两个状态会比较容易让人混淆的,休眠状态时,程序停止运行,但不同的是此时整个进程还是存在于内存中。当恢复这个程序时,就不需要创建一个新的实例。这样就加快了程序恢复和切换的速度,并且从休眠状态恢复时我们不需要去恢复墓碑数据。一般情况下点击home键,程序会进入休眠状态,当前台程序在运行过程中,内存不足或者不足以让程序流畅运行时,系统会执行一些操作来释放内存,此时程序就可能从休眠状态变换为的墓碑状态。一个程序进入到墓碑状态时,其进程被终止掉,但是程序的回退栈中的信息,以及我们保存的一些信息会保留在内存中。

WP7程序的生命周期如下图所示

WP7程序的生命周期

程序恢复时会触发Application类中的Activated 事件,我们可以通过检查IsApplicationInstancePreserved参数来判断程序是从休眠状态还是墓碑状态返回的,在此方法中我们可以用来恢复之前在Deactivated事件中保存的数据。

处理的代码如下:

  1. private void Application_Activated(object sender, ActivatedEventArgs e)  
  2. {  
  3.   if (e.IsApplicationInstancePreserved)  
  4.   {  
  5.     //从休眠状态恢复  
  6.   }  
  7.   else  
  8.   {  
  9.     //从墓碑状态恢复  
  10.     //这时候程序在内存中的信息已经被清除掉了,需要在这里处理如何恢复你之前的数据  
  11.   }        

调试程序墓碑状态的恢复可以通过在vs上设置来实现这一种模拟的效果,设置如下:

从休眠状态恢复到程序的时候,如果这时候我们在程序中正在发送http请求的话,有可能这个请求会被取消掉,这时候我们需要在程序中来捕获这个异常并进行处理。处理代码如下:

  1. private void GetSomeResponse(IAsyncResult MyResultAsync)  
  2. {     
  3.      HttpWebRequest request = (HttpWebRequest)MyResultAsync.AsyncState;     
  4.      try     
  5.       {    
  6.          HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyResultAsync);     
  7.          if (response.StatusCode == HttpStatusCode.OK && response.ContentLength > 0)     
  8.          {     
  9.              using (StreamReader sr = new StreamReader(response.GetResponseStream()))   
  10.             {    
  11.                //……                         
  12.              }    
  13.         }    
  14.      }    
  15.      catch (WebException e)    
  16.      {    
  17.             
  18.        if(e.Status == WebExceptionStatus.RequestCanceled)    
  19.              //这里有可能就是从休眠和墓碑状态返回来的  
  20.              //可以在这这里处理休眠和墓碑状态的恢复,例如重新发送http请求……  
  21.        else    
  22.           {    
  23.              //其他的异常  
  24.              using (HttpWebResponse response = (HttpWebResponse)e.Response)    
  25.               {    
  26.                   MessageBox.Show(response.StatusCode.ToString());    
  27.              }    
  28.          }    
  29.      }    

原文链接:http://www.cnblogs.com/linzheng/archive/2012/01/17/2324991.html

【编辑推荐】

  1. 详解WP开发中MVVM模式的绑定功能
  2. Windows Phone 7数字罗盘使用指南
  3. 浅谈Windows Phone应用程序生命周期
  4. 详解Windows Phone开发中的墓碑机制
责任编辑:王晓东 来源: 博客
相关推荐

2013-07-31 13:03:51

Windows PhoWindows Pho

2012-07-31 09:44:27

Windows Pho

2012-05-25 09:09:25

Windows Pho

2009-08-27 09:57:24

Power7处理器

2012-08-17 13:44:26

Windows Pho

2009-09-09 16:47:31

Power 7处理器

2010-02-11 12:47:39

IBM Power7处

2011-07-12 09:20:32

Windows 8Windows Pho

2011-04-20 11:04:23

LinuxHTTP 302

2010-12-01 13:40:13

枢轴控件Windows Pho

2010-12-01 13:55:29

地图插件Windows Pho

2010-10-11 14:42:49

Windows Pho

2012-08-17 09:15:16

Windows Pho

2011-04-25 13:06:57

iPad2苹果A5处理器

2021-06-22 05:41:07

Windows10操作系统微软

2010-11-26 16:00:08

Windows Pho

2013-07-30 11:18:37

Windows PhoWindows Pho

2010-05-05 13:16:02

Windows PhoWindows CE

2011-04-29 16:44:43

笔记本神舟精盾K480A

2011-04-25 16:17:42

英特尔至强E7处理器
点赞
收藏

51CTO技术栈公众号