windows phone 墓碑化(9)

原文: windows phone 墓碑化(9)

幾個術語的理解:html

 

名稱windows

說明app

Launchedide

啓動新程序的啓動函數

Closedpost

經過Back按鍵關閉程序this

Deactivatedurl

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

Activated3d

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

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

 

 

生命週期的描述:當咱們在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方法獲取值,該方法的好處是不會報出異常信息PhoneApplicationService.Current.State.TryGetValue方法獲取值,該方法的好處是不會報出異常信息

 

 

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

 

相關文章
相關標籤/搜索