wp7 生命周期及多任务 详解
APP生命周期:
單個app運行時:
啟動(Launching)------進入頁面(OnNavigationTo)------離開頁面(OnNavigationFrom)------關閉(Closing)
多個app運行時:
1. 啟動(Launching)-------進入頁面(OnNavigationTo)------離開頁面(OnNavigationFrom)------休眠(Deativate)------從休眠中激活(Activate)
------進入頁面(OnNavigationTo)------離開頁面(OnNavigationFrom)------關閉(Closing)
2. ??啟動(Launching)-------進入頁面(OnNavigationTo)------離開頁面(OnNavigationFrom)------休眠(Deativate)------墓碑化(Deactivate)------
從墓碑化中激活(Activate)------進入頁面(OnNavigationTo)------離開頁面(OnNavigationFrom)------關閉(Closing)
? ? ? ? ?
?
說明:
1.首次啟動app時會觸發Launching 事件,可以在這一步完成一些初始化的操作,但不要做太耗時的工作,否則會讓啟動變慢,給用戶很卡的感覺。
2.加載完成后app處于Running狀態,如果按下Back按鈕會觸發回退事件,若是在首頁則觸發Closing事件退出程序,如果不是首頁則回退到上一頁面。
3.在App運行中按下“開始”按鈕則程序不會立即關閉,而是觸發Deactivate事件,app進入tombstoning(墓碑化)狀態,之后呈現瓷磚首頁。
4.這個時候按下Back按鈕 會觸發Activate 事件使app重新回到Running 狀態
注意: 在wp7.1中已經實現偽多任務狀態,即增加一種休眠狀態
在墓碑化的過程中 其實進程已經被kill,只因開發者保存了部分狀態在隔離存儲空間或者內存中(回退棧信息)。到了wp7.1時代新增了 休眠狀態,也就出現了現在的偽多任務
休眠:程序在Running狀態時 點擊了“開始”按鈕,或者是在程序中啟動了另外一個應用程序時,原程序就會進入休眠狀態。
休眠狀態時,程序停止運行(和墓碑機制相同),但程序還處于內存中(和墓碑機制不同,墓碑機制是直接被kill)。
當恢復這個程序時 就不需要再創建一個新實例(墓碑需要創建新實例),這樣就加快程序恢復和切換速度。而且休眠狀態時我們不需要去恢復數據。
在wp7.1中長按 回退 按鈕 會出現程序列表,然后選擇在前臺執行的程序。休眠狀態的程序會占用部分內存資源,當前臺程序運行時內存不夠或者運行不流暢時,系統會自動將部分休眠狀態程序墓碑化。在內存足夠且程序運行流暢時,休眠狀態的程序也是有限制的,最多允許出現5個休眠程序,當超過時會自動將前面的休眠程序墓碑化。
由于wp7沒有提供exit退出,所以我們恢復程序可能是從休眠狀態或者墓碑狀態來恢復,
1.從休眠狀態恢復時我們不需要恢復保存的數據
2.從墓碑狀態恢復時需要恢復保存的數據
so wp7.1中提供了 IsApplicationInstancePreserved 參數來判斷程序是從休眠狀態還是墓碑狀態恢復
下面以代碼示例,數據的保存和恢復,主要用到一下6個函數
App.xml.cs:
Application_Launching //啟動
Application_Activated //激活
Application_Deactivated //休眠
Application_Closing //關閉
Page.cs:
OnNavigationTo //跳轉進
OnNavigationFrom //跳轉出
?
Launching 在程序啟動時調用,在程序從休眠或者墓碑機制中恢復過來時不調用,用來處理一些耗時極短的信息
private void Application_Launching(object sender, LaunchingEventArgs e){using (IsolatedStorageFile Iso = IsolatedStorageFile.GetUserStoreForApplication()){if(IsolatedStorageSettings.ApplicationSettings.Contains(IsoSetting1)){IsoContext = IsolatedStorageSettings.ApplicationSettings[IsoSetting1] as string;}}}Closing 在程序關閉時調用,程序從休眠或者墓碑狀態恢復時不調用,用這個函數保存一下信息
private void Application_Closing(object sender, ClosingEventArgs e){using (IsolatedStorageFile Iso = IsolatedStorageFile.GetUserStoreForApplication()){IsolatedStorageSettings.ApplicationSettings[IsoSetting1] = IsoContext;}}Deactivate 在程序失去激活時調用,程序關閉時不調用,通常使用這個函數來保存程序進入墓碑化是存儲的一些信息,通過Application中的 State 保存
private void Application_Deactivated(object sender, DeactivatedEventArgs e){PhoneApplicationService.Current.State[IsoSetting1] = IsoContext;}Activate 程序在被重新激活時調用,即從墓碑或者休眠狀態恢復時調用,在程序啟動時不調用。使用這個方法來恢復程序從墓碑化激活時需要恢復的一些程序集信息,通過IsApplicationInstancePreserver 來判斷程序是通過休眠還是墓碑恢復的
private void Application_Activated(object sender, ActivatedEventArgs e){if (!e.IsApplicationInstancePreserved){IsoContext = PhoneApplicationService.Current.State[IsoSetting1] as string;}}OnNavigationFrom 方法是在離開該頁是調用,用這個方法保存一些頁面級的信息,通過page的State來保存
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e){base.OnNavigatedFrom(e);if (e.NavigationMode != System.Windows.Navigation.NavigationMode.Back){State[numsetting1] = num; }}OnNavigationTo 在進入該頁面時調用,用這個方法恢復一些頁面級的信息
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){base.OnNavigatedTo(e);if (e.NavigationMode != System.Windows.Navigation.NavigationMode.New){if (State.ContainsKey(numsetting)){num = State[numsetting] as string;}}}?
?
?
說明:本文主要參考?Kingly?和?東子哥的博文。
?
?
?
?
轉載于:https://www.cnblogs.com/bubo/archive/2012/05/25/2518512.html
總結
以上是生活随笔為你收集整理的wp7 生命周期及多任务 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ-2195(最小费用最大流)
- 下一篇: Vs2005 正在更新 IntelliS