博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】休眠状态和墓碑状态
阅读量:6534 次
发布时间:2019-06-24

本文共 1715 字,大约阅读时间需要 5 分钟。

Just have a little faith.

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

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

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

处理的代码如下:

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

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

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

private void GetSomeResponse(IAsyncResult MyResultAsync) {        HttpWebRequest request = (HttpWebRequest)MyResultAsync.AsyncState;   try         {           HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyResultAsync);   if (response.StatusCode == HttpStatusCode.OK && response.ContentLength > 0)            {   using (StreamReader sr = new StreamReader(response.GetResponseStream()))             {  //……                                    }          }       }  catch (WebException e)       {  if(e.Status == WebExceptionStatus.RequestCanceled)  //这里有可能就是从休眠和墓碑状态返回来的 //可以在这这里处理休眠和墓碑状态的恢复,例如重新发送http请求……        else            {  //其他的异常              using (HttpWebResponse response = (HttpWebResponse)e.Response)                {                    MessageBox.Show(response.StatusCode.ToString());               }           }       }  }

转载于:https://www.cnblogs.com/fx2008/archive/2012/11/16/2772768.html

你可能感兴趣的文章
回调函数
查看>>
win7 x64 jdk1.7.0_51
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>
项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors
查看>>
JVM学习笔记(一)------基本结构
查看>>
活动目录之备份与恢复
查看>>
删除 Eclipse 的 configuration 目录
查看>>
MOXA的智能通信产品也大力支持WinCE.net了
查看>>
ActiveX开发知多少?
查看>>
你不得不知道的Visual Studio 2012(3)- 创建Windows应用程序
查看>>
Android操作系统2.0制作备份
查看>>