windows phone 墓碑化(9)

來源:互聯網
上載者:User

幾個術語的理解:

 

名稱

說明

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檔案中可以找到改變這幾個狀態時所觸發的事件,事件裡面有註解就不在詳細說明了

// 應用程式啟動(例如,從“開始”菜單啟動)時執行的代碼        // 此代碼在重新啟用應用程式時不執行        private void Application_Launching(object sender, LaunchingEventArgs e)        {            //可以從隔離儲存區 (Isolated Storage)空間讀取資料進行初始化        }        // 啟用應用程式(置於前台)時執行的代碼        // 此代碼在初次開機應用程式時不執行        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鍵時,可以儲存到隔離儲存區 (Isolated Storage)空間        }

效果:

 

那麼下面的案例就是在使用者關閉程式後,在從工作管理員中重新啟用或者通過Back鍵返回到程式,進行資料的暫存;其實就是讓使用者感覺不到程式已經關閉了,當使用者程式回到程式時,和使用者離開時呈現出來的相一致;

 由於MainPage.xaml頁面沒有任何修改,所以沒有貼出,MainPage隱藏檔案代碼:

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 { get; set; }

 即儲存資料的公用屬性,其中我們用到的兩個方法,並把他們實現:

 // 啟用應用程式(置於前台)時執行的代碼        // 此代碼在初次開機應用程式時不執行        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,進行啟用使用;

源碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.