windows phone 墓碑化(9)

幾個術語的理解:

 

名稱

說明

Launched

啓動新程序的啓動

Closed

通過Back按鍵關閉程序

Deactivated

一個正在程序運行,此時按start鍵,程序停用,此後進入墓碑化

Activated

程序從墓碑化復活,即激活

那麼我們程序的生命週期也就大致顯示出來了:


 

 

生 命週期的描述:當我們在start頁面運行一個程序A時,此時程序A進入啓動(Launched)階段,啓動完成之後,程序一般會相當長的時間處於 running狀態,如果此時你按Back鍵,則直接進入Closed狀態,還有就是在運行過程中有突發事件,比如來電話,來信息,或者你需要運行程序 B,你就按Start鍵,在按Start鍵的時候處於Deactivated狀態,然後在運行程序B的過程中,程序A一直處於Tombstoning墓碑 化狀態(除非你從Start頁重新啓用程序A的新實例),在操作程序B的過程中你如果長按Back鍵,系統會調出卡片式任務管理器,裏面就會包含程序A, 程序B,Start頁面,如果點擊程序A,此時程序A就會被激活,進入運行狀態,之至改程序被關閉,程序A的生命週期就完成了;

 在App.xaml.cs文件中可以找到改變這幾個狀態時所觸發的事件,事件裏面有註解就不在詳細說明了

View Code
// 應用程序啓動(例如,從“開始”菜單啓動)時執行的代碼
        
// 此代碼在重新激活應用程序時不執行
        private void Application_Launching(object sender, LaunchingEventArgs e)
        {
            //可以從獨立存儲空間讀取資料進行初始化
        }

        // 激活應用程序(置於前臺)時執行的代碼
        
// 此代碼在首次啓動應用程序時不執行
        private void Application_Activated(object sender, ActivatedEventArgs e)
        {
            //可以恢復臨時數據
           
           
        }

        // 停用應用程序(發送到後臺)時執行的代碼
        
// 此代碼在應用程序關閉時不執行
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
            //存儲臨時數據,以便用戶從墓碑化狀態激活
            
        }

        // 應用程序關閉(例如,用戶點擊“後退”)時執行的代碼
        
// 此代碼在停用應用程序時不執行
        private void Application_Closing(object sender, ClosingEventArgs e)
        {
            //程序按Back鍵時,可以存儲到獨立存儲空間
        }

效果:

 

那麼下面的案例就是在用戶關閉程序後,在從任務管理器中重新激活或者通過Back鍵返回到程序,進行數據的暫存;其實就是讓用戶感覺不到程序已經關閉了,當用戶程序回到程序時,和用戶離開時呈現出來的相一致;

 由於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;
        // 構造函數
        public MainPage()
        {
            InitializeComponent();
        }
        //經驗證此方法只有在程序啓動的時候才加載
        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            //this.ApplicationTitle.Text = ap.appKey;
        }
        protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
        {
            sum++;
            //程序標題處顯示
            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);
        }
       
    }
}

 從 上面代碼中可以看出我們是把數據保存到App類中的一個公共屬性中了,我們在觸摸事件中把自加的數值賦值於App公共屬性appKey,在 MainPage頁面加載後調用OnNavigatedTo方法進行初始化,可以看出我們把臨時數據保存在App類中了,那麼App類中是怎麼實現的 那;App類隱藏文件中添加的代碼如下:

 public string appKey { getset; }

 即保存數據的公共屬性,其中我們用到的兩個方法,並把他們實現:

View Code
  // 激活應用程序(置於前臺)時執行的代碼
        
// 此代碼在首次啓動應用程序時不執行
        private void Application_Activated(object sender, ActivatedEventArgs e)
        {
            //可以恢復臨時數據
            object str=string.Empty;

            if (PhoneApplicationService.Current.State.TryGetValue("key"out str))
            {
                appKey=str.ToString();
            }
           
        }

        // 停用應用程序(發送到後臺)時執行的代碼
        
// 此代碼在應用程序關閉時不執行
        private void Application_Deactivated(object sender, DeactivatedEventArgs e)
        {
            //存儲臨時數據,以便用戶從墓碑化狀態激活
            PhoneApplicationService.Current.State["key"] = appKey;
        }

 可以看到我們是在用戶遇到突發事件(如電話)時用PhoneApplicationService.Current.State進行存儲的,並在用戶通過任務管理器或者Back鍵時激活改程序,並用

PhoneApplicationService.Current.State.TryGetValue方法獲取值,該方法的好處是不會報出異常信息;任務管理器的的效果圖:

 

 

 windows phone 7 對多個應用程序的管理:windows phone 7 是通過棧對多個程序進行管理的,當我們運行程序A的時候,如果我們需要運行程序B,那麼我們會按Start鍵,Start鍵就會把程序A壓入棧中(此時程 序A是停止運行的),如果需要運行程序C,同樣程序B也會被壓入棧中,那麼按Back鍵就會把當前程序C終止,並從棧中獲得最後一個壓入程序B,進行激活 使用;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章