Windows Phone開發(3):棋子未動,先觀全域 轉:http://blog.csdn.net/tcjiaan/article/details/7253259

來源:互聯網
上載者:User

在進行WP開發之前,與其它開發技術一樣,我們需要簡單瞭解一個WP應用序的生命週期,我們不一定要深入瞭解,但至少要知道在應用程式生命週期內的每一階段,我們應當做什麼,不推薦哪些操作等,這也是為了讓我們開發出更高效能,更優秀的應用程式打下堅實的基礎。

 

是官方給出的WP應用程式執行模型圖。

 

 

在中,我們要注意以下四個事件:

1、Launching 事件。

說白了,就是應用程式剛啟動時觸發的事件,由於這個事件的一點特殊性,盡量不要在該事件處理常式中做大量的操作,比如比較耗時間的作業,為什麼呢?你想想,如果你的某個操作需要消耗大量時間的話,那麼,你肯定會發現,程式啟動的速度很慢,這樣一來,使用者會很不爽,使用者體驗就大打折扣。

2、Activated事件。

應用程式被啟用時觸發,例如,我的程式上面有一個按鈕,使用者點擊後開啟發簡訊的“視窗”,當使用者發送完簡訊後,發簡訊的頁面就關閉,這時候,我們的應用程式又從背景程式變為前景程式了,Activated事件將觸發,注意的是,第一次啟動程式時是不觸發該事件的。

3、Deactivated事件。

與Activated事件相對,比如上面舉的例子,當我在程式上點擊按鈕時,傳送簡訊的頁面將啟動,這時候,當前應用程式就被前面的發簡訊的頁面擋住了,也就是說,當前程式被發送到後台,這個時刻就觸發了Deactivated事件。不過,如果應用程式將關閉,該事件不觸發。

4、Closing事件。

從字面意思就猜到該事件在啥時候發生了。對,當應用程式關閉時發生,但在應用程在導航中被發送到後台時不發生,比如剛才說的開啟發簡訊的頁面後,雖然程式被發送到後台了,但由於它仍在運行,沒有退出,所以這個時候不觸發。但如果我從“開始”或案頭磁磚中啟動程式後,然後再通過“返回”鍵回到案頭,這個時候因為程式會退出,所以該事件觸發。

 

 

為了驗證這些事件是如何發生的,我們在app.xaml.cs檔案中,分別為這幾個事件寫下調試輸出代碼。

[csharp] view plaincopyprint?

  1. // 應用程式啟動(例如,從“開始”菜單啟動)時執行的代碼  
  2. // 此代碼在重新啟用應用程式時不執行;  
  3. private void Application_Launching(object sender, LaunchingEventArgs e)  
  4. {  
  5.     System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 應用程式初次開機。");  
  6. }  
  7.   
  8. // 啟用應用程式(置於前台)時執行的代碼  
  9. // 此代碼在初次開機應用程式時不執行  
  10. private void Application_Activated(object sender, ActivatedEventArgs e)  
  11. {  
  12.     System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 應用程式被啟用。");  
  13. }  
  14.   
  15. // 停用應用程式(發送到後台)時執行的代碼  
  16. // 此代碼在應用程式關閉時不執行  
  17. private void Application_Deactivated(object sender, DeactivatedEventArgs e)  
  18. {  
  19.     System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 應用程式休眠。");  
  20. }  
  21.   
  22. // 應用程式關閉(例如,使用者點擊“後退”)時執行的代碼  
  23. // 此代碼在停用應用程式時不執行  
  24. private void Application_Closing(object sender, ClosingEventArgs e)  
  25. {  
  26.     System.Diagnostics.Debug.WriteLine(DateTime.Now.ToShortTimeString() + " - 應用程式關閉。");  
  27. }  

然後,我們運行程式,當首頁面出現後,點擊模擬器上的“返回”鍵把程式關閉。

這時候,我們再去看一下“輸出”視窗。

通過這個實驗,我們發現Activated事件和Deactivated事件未被觸發,為什嗎?自己思考吧。

 

下面,我們在頁面中放一個按鈕,點擊按鈕後,開啟傳送簡訊的頁面。

[html] view plaincopyprint?

  1. <!--ContentPanel - 在此處放置其他內容-->  
  2. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">  
  3.     <Button VerticalAlignment="Top"  
  4.             HorizontalAlignment="Center"  
  5.             Content="請點擊我"  
  6.             FontSize="64"  
  7.             Click="Button_Click"  
  8.             Margin="0,12,0,0"/>  
  9. </Grid>  

 

編寫單擊事件代碼。

[csharp] view plaincopyprint?

  1. private void Button_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.     Microsoft.Phone.Tasks.SmsComposeTask sms = new Microsoft.Phone.Tasks.SmsComposeTask();  
  4.     sms.To = "13672265138";  
  5.     sms.Body = "你好啊,今天中午請我吃牛肉炒飯嗎?";  
  6.     sms.Show();  
  7. }  

 

按F5運行,再點擊按鈕,開啟發簡訊頁面。

 

看看“輸出”視窗,這時候,就看到Deactivated事件發生了,因為程式還沒有退出,只是被放到後台。

 

接著,點擊模擬器的“返回”,退回到我們的程式。再看看輸出視窗。

 

這個時候,Activated事件就發生了。

 

OK,今天的牛皮就吹到這裡吧。

相關文章

聯繫我們

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