【转载】休眠状态和墓碑状态
2012-11-16 10:34
429 查看
Just have a little faith.
休眠状态和墓碑状态这两个状态会比较容易让人混淆的,休眠状态时,程序停止运行,但不同的是此时整个进程还是存在于内存中。当恢复这个程序时,就不需要创建一个新的实例。这样就加快了程序恢复和切换的速度,并且从休眠状态恢复时我们不需要去恢复墓碑数据。一般情况下点击home键,程序会进入休眠状态,当前台程序在运行过程中,内存不足或者不足以让程序流畅运行时,系统会执行一些操作来释放内存,此时程序就可能从休眠状态变换为的墓碑状态。一个程序进入到墓碑状态时,其进程被终止掉,但是程序的回退栈中的信息,以及我们保存的一些信息会保留在内存中。
程序恢复时会触发Application类中的Activated 事件,我们可以通过检查IsApplicationInstancePreserved参数来判断程序是从休眠状态还是墓碑状态返回的,在此方法中我们可以用来恢复之前在Deactivated事件中保存的数据。
处理的代码如下:
调试程序墓碑状态的恢复可以通过在vs上设置来实现这一种模拟的效果,设置如下:
从休眠状态恢复到程序的时候,如果这时候我们在程序中正在发送http请求的话,有可能这个请求会被取消掉,这时候我们需要在程序中来捕获这个异常并进行处理。处理代码如下:
Windows Phone 7 处理休眠和墓碑的恢复
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()); } } } }
相关文章推荐
- 阻止屏幕变暗进入休眠状态
- 【转载】 ASP.NET状态服务及session丢失问题解决方案总结
- linux僵尸进程&&进程进入不可中断休眠状态
- [转载]Linux系统中休眠的理解
- 让Win7系统在休眠状态离线下载的小技巧
- (转载)--Fragment Transactions和Activity状态丢失
- 【转载】生产订单标准系统状态-
- 深入hibernate的三种状态【转载】
- 禁止android进去休眠状态
- Linux 进程状态 说明 ,转载!
- 【转载】WebService(C#)代理访问外网及报错“请求因 HTTP 状态 407 失败”解决方案
- [转载]android 休眠
- 【转载】EJB状态图
- 假期休眠状态(牛牛3)。
- Windows CE 休眠唤醒全面解析(基于2440平台)(3) ——转载
- Android 休眠状态对Camera预览的影响
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
- win8系统笔记本如何调整关盖状态防止自动休眠
- win8.1休眠状态下不能进入系统
- HTTP 状态代码及其定义(转载)