Windows Phone 7 處理休眠和墓碑的恢複

來源:互聯網
上載者:User

     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());
}
}
}
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.