[转载]windows phone 墓碑化(9)
幾個術(shù)語的理解:
名稱 | 說明 |
Launched | 啟動新程序的啟動 |
Closed | 通過Back按鍵關(guān)閉程序 |
Deactivated | 一個正在程序運行,此時按start鍵,程序停用,此后進入墓碑化 |
Activated | 程序從墓碑化復(fù)活,即激活 |
生命周期的描述:當(dāng)我們在start頁面運行一個程序A時,此時程序A進入啟動(Launched)階段,啟動完成之后,程序一般會相當(dāng)長的時間處于running狀態(tài),如果此時你按Back鍵,則直接進入Closed狀態(tài),還有就是在運行過程中有突發(fā)事件,比如來電話,來信息,或者你需要運行程序B,你就按Start鍵,在按Start鍵的時候處于Deactivated狀態(tài),然后在運行程序B的過程中,程序A一直處于Tombstoning墓碑化狀態(tài)(除非你從Start頁重新啟用程序A的新實例),在操作程序B的過程中你如果長按Back鍵,系統(tǒng)會調(diào)出卡片式任務(wù)管理器,里面就會包含程序A,程序B,Start頁面,如果點擊程序A,此時程序A就會被激活,進入運行狀態(tài),之至改程序被關(guān)閉,程序A的生命周期就完成了;
在App.xaml.cs文件中可以找到改變這幾個狀態(tài)時所觸發(fā)的事件,事件里面有注解就不在詳細(xì)說明了
View Code // 應(yīng)用程序啟動(例如,從“開始”菜單啟動)時執(zhí)行的代碼??????? // 此代碼在重新激活應(yīng)用程序時不執(zhí)行
??????? private void Application_Launching(object sender, LaunchingEventArgs e)
??????? {
??????????? //可以從獨立存儲空間讀取資料進行初始化
??????? }
??????? // 激活應(yīng)用程序(置于前臺)時執(zhí)行的代碼
??????? // 此代碼在首次啟動應(yīng)用程序時不執(zhí)行
??????? private void Application_Activated(object sender, ActivatedEventArgs e)
??????? {
??????????? //可以恢復(fù)臨時數(shù)據(jù)
??????????
??????????
??????? }
??????? // 停用應(yīng)用程序(發(fā)送到后臺)時執(zhí)行的代碼
??????? // 此代碼在應(yīng)用程序關(guān)閉時不執(zhí)行
??????? private void Application_Deactivated(object sender, DeactivatedEventArgs e)
??????? {
??????????? //存儲臨時數(shù)據(jù),以便用戶從墓碑化狀態(tài)激活
???????????
??????? }
??????? // 應(yīng)用程序關(guān)閉(例如,用戶點擊“后退”)時執(zhí)行的代碼
??????? // 此代碼在停用應(yīng)用程序時不執(zhí)行
??????? private void Application_Closing(object sender, ClosingEventArgs e)
??????? {
??????????? //程序按Back鍵時,可以存儲到獨立存儲空間
??????? }
效果:
那么下面的案例就是在用戶關(guān)閉程序后,在從任務(wù)管理器中重新激活或者通過Back鍵返回到程序,進行數(shù)據(jù)的暫存;其實就是讓用戶感覺不到程序已經(jīng)關(guān)閉了,當(dāng)用戶程序回到程序時,和用戶離開時呈現(xiàn)出來的相一致;
由于MainPage.xaml頁面沒有任何修改,所以沒有貼出,MainPage隱藏文件代碼:
View Code using System;using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
//
using Microsoft.Phone.Shell;
namespace Tombstoned
{
??? public partial class MainPage : PhoneApplicationPage
??? {
??????? int sum = 0;
??????? App ap = (App)Application.Current;
??????? // 構(gòu)造函數(shù)
??????? public MainPage()
??????? {
??????????? InitializeComponent();
??????? }
??????? //經(jīng)驗證此方法只有在程序啟動的時候才加載
??????? private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
??????? {
??????????? //this.ApplicationTitle.Text = ap.appKey;
??????? }
??????? protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
??????? {
??????????? sum++;
??????????? //程序標(biāo)題處顯示
??????????? this.PageTitle.Text = sum.ToString();
??????????? ap.appKey = this.PageTitle.Text;
??????????? base.OnManipulationStarted(e);
??????? }
??????? protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
??????? {
??????????? if (!string.IsNullOrEmpty(ap.appKey))
??????????? {
??????????????? this.PageTitle.Text = ap.appKey;
??????????? }
????????
??????????? base.OnNavigatedTo(e);
??????? }
??????
??? }
}
從上面代碼中可以看出我們是把數(shù)據(jù)保存到App類中的一個公共屬性中了,我們在觸摸事件中把自加的數(shù)值賦值于App公共屬性appKey,在MainPage頁面加載后調(diào)用OnNavigatedTo方法進行初始化,可以看出我們把臨時數(shù)據(jù)保存在App類中了,那么App類中是怎么實現(xiàn)的那;App類隱藏文件中添加的代碼如下:
public string appKey { get; set; }即保存數(shù)據(jù)的公共屬性,其中我們用到的兩個方法,并把他們實現(xiàn):
View Code // 激活應(yīng)用程序(置于前臺)時執(zhí)行的代碼??????? // 此代碼在首次啟動應(yīng)用程序時不執(zhí)行
??????? private void Application_Activated(object sender, ActivatedEventArgs e)
??????? {
??????????? //可以恢復(fù)臨時數(shù)據(jù)
??????????? object str=string.Empty;
??????????? if (PhoneApplicationService.Current.State.TryGetValue("key", out str))
??????????? {
??????????????? appKey=str.ToString();
??????????? }
??????????
??????? }
??????? // 停用應(yīng)用程序(發(fā)送到后臺)時執(zhí)行的代碼
??????? // 此代碼在應(yīng)用程序關(guān)閉時不執(zhí)行
??????? private void Application_Deactivated(object sender, DeactivatedEventArgs e)
??????? {
??????????? //存儲臨時數(shù)據(jù),以便用戶從墓碑化狀態(tài)激活
??????????? PhoneApplicationService.Current.State["key"] = appKey;
??????? }
可以看到我們是在用戶遇到突發(fā)事件(如電話)時用PhoneApplicationService.Current.State進行存儲的,并在用戶通過任務(wù)管理器或者Back鍵時激活改程序,并用
PhoneApplicationService.Current.State.TryGetValue方法獲取值,該方法的好處是不會報出異常信息;任務(wù)管理器的的效果圖:
windows phone 7 對多個應(yīng)用程序的管理:windows phone 7 是通過棧對多個程序進行管理的,當(dāng)我們運行程序A的時候,如果我們需要運行程序B,那么我們會按Start鍵,Start鍵就會把程序A壓入棧中(此時程序A是停止運行的),如果需要運行程序C,同樣程序B也會被壓入棧中,那么按Back鍵就會把當(dāng)前程序C終止,并從棧中獲得最后一個壓入程序B,進行激活使用;
源碼
總結(jié)
以上是生活随笔為你收集整理的[转载]windows phone 墓碑化(9)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《MongoDB权威指南》读书笔记 第一
- 下一篇: App5.0程序导入及发布